1. Packages
  2. Kubernetes
  3. How-to Guides
  4. Continuous Integration with Jenkins
Kubernetes v4.22.2 published on Tuesday, Apr 15, 2025 by Pulumi

Continuous Integration with Jenkins

Kubernetes v4.22.2 published on Tuesday, Apr 15, 2025 by Pulumi

View Code Deploy this example with Pulumi

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
Copy

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
Copy

Configure Kubernetes to run without Minikube:

    $ pulumi config set isMinikube false
Copy

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

    Resources:
        + 6 to create
Copy

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

    Outputs:
        external_ip: "35.239.72.50"

    Resources:
        + 6 created

    Duration: 1m57s
Copy

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
    35.239.72.50
Copy

The Jenkins instance we just deployed is reachable through port 80 of the external IP address. You can now visit http://35.239.72.50/login 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

    Outputs:
      - external_ip: "35.239.72.50"

    Resources:
        - 6 deleted

    Duration: 33s
Copy
Kubernetes v4.22.2 published on Tuesday, Apr 15, 2025 by Pulumi