Welcome to Pulumi Registry, your window into the cloud. Read the announcement.


v3.10.1 published on Friday, Nov 19, 2021 by Pulumi

Continuous Integration with Jenkins

View Code Deploy

This example deploys a container running the Jenkins continuous integration system onto a running Kubernetes cluster using Pulumi and @pulumi/kubernetes.

Running the App

Follow the steps in Pulumi Installation and Setup and Configuring Pulumi Kubernetes to get setup with Pulumi and Kubernetes.

Note: The code in this repo assumes you are deploying to a cluster that supports the LoadBalancer service type. This includes most cloud providers as well as Docker for Mac Edge w/ Kubernetes. If not (for example if you are targeting minikube or your own custom Kubernetes cluster), replace type: "LoadBalancer" with type: "ClusterIP" in jenkins.ts. See the Kubernetes Services docs for more details.

Create a new stack:

    $ pulumi stack init dev

Create configuration keys for the root username and password for the Jenkins instance we are about to create:

    $ pulumi config set username <your desired username>
    $ pulumi config set password <your desired password> --secret

Configure Kubernetes to run without Minikube:

    $ pulumi config set isMinikube false

Preview the deployment of the application:

    $ pulumi preview
    Previewing update (dev):
         Type                                         Name                       Plan       
     +   pulumi:pulumi:Stack                          kubernetes-py-jenkins-dev  create     
     +   └─ jenkins:jenkins:Instance                  dev                        create     
     +      ├─ kubernetes:core:Service                dev-service                create     
     +      ├─ kubernetes:core:PersistentVolumeClaim  dev-pvc                    create     
     +      ├─ kubernetes:core:Secret                 dev-secret                 create     
     +      └─ kubernetes:apps:Deployment             dev-deploy                 create     

        + 6 to create

Perform the deployment:

    $ pulumi up --skip-preview
    Updating (dev):
         Type                                         Name                       Status      
     +   pulumi:pulumi:Stack                          kubernetes-py-jenkins-dev  created     
     +   └─ jenkins:jenkins:Instance                  dev                        created     
     +      ├─ kubernetes:core:PersistentVolumeClaim  dev-pvc                    created     
     +      ├─ kubernetes:core:Service                dev-service                created     
     +      ├─ kubernetes:core:Secret                 dev-secret                 created     
     +      └─ kubernetes:apps:Deployment             dev-deploy                 created     

        external_ip: ""

        + 6 created

    Duration: 1m57s

The deployment is complete! Use pulumi stack output external_ip to see the IP of the Service that we just deployed:

    $ pulumi stack output external_ip

The Jenkins instance we just deployed is reachable through port 80 of the external IP address. You can now visit in a Web browser to begin the first-install flow for your new Jenkins instance. You can use the username and password that you saved in your Pulumi config to log in to your new Jenkins instance.

Note: If you are deploying to a cluster that does not support type: "LoadBalancer", and deployed the example using type: "ClusterIP" instead, run kubectl port-forward svc/jenkins 8080:80 to forward the cluster port to the local machine and access the service via localhost:8080.

When you’re ready to be done with Jenkins, you can destroy the instance:

    $ pulumi destroy
        Destroying (dev):
         Type                                         Name                       Status      
     -   pulumi:pulumi:Stack                          kubernetes-py-jenkins-dev  deleted     
     -   └─ jenkins:jenkins:Instance                  dev                        deleted     
     -      ├─ kubernetes:core:Secret                 dev-secret                 deleted     
     -      ├─ kubernetes:core:Service                dev-service                deleted     
     -      ├─ kubernetes:core:PersistentVolumeClaim  dev-pvc                    deleted     
     -      └─ kubernetes:apps:Deployment             dev-deploy                 deleted     
      - external_ip: ""
        - 6 deleted
    Duration: 33s