Continuous Integration with Jenkins
Jenkins deployment on Kubernetes
This example lives in the pulumi/examples repository. Check out just this directory to use it:
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examplesgit -C pulumi-examples sparse-checkout set kubernetes-ts-jenkinscd pulumi-examples/kubernetes-ts-jenkinsThis 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
LoadBalancerservice type. This includes most cloud providers as well as Docker for Mac Edge w/ Kubernetes.
Install dependencies:
npm installCreate a new stack:
pulumi stack init devCreate 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> --secretSetting the minikube values:
Note: MetalLb is required for minikube. You will either need to enable it yourself with:
minikube addons enable metallbor setenableMetalLBto true.
pulumi config set isMinikube true #set to false if you are not using minikubepulumi config set enableMetalLB truePreview the deployment of the application:
pulumi previewPreviewing update (dev): Type Name Plan + pulumi:pulumi:Stack kubernetes-ts-jenkins-dev create + └─ jenkins:jenkins:Instance dev create + ├─ kubernetes:core:PersistentVolumeClaim dev-pvc create + ├─ kubernetes:core:Secret dev-secret create + ├─ kubernetes:core:Service dev-service create + └─ kubernetes:apps:Deployment dev-deploy create
Resources: + 6 to createPerform the deployment:
pulumi up --skip-previewUpdating (dev): Type Name Status + pulumi:pulumi:Stack kubernetes-ts-jenkins-dev created + └─ jenkins:jenkins:Instance dev created + ├─ kubernetes:core:Secret dev-secret created + ├─ kubernetes:core:Service dev-service created + ├─ kubernetes:core:PersistentVolumeClaim dev-pvc created + └─ kubernetes:apps:Deployment dev-deploy created
Outputs: externalIp: "35.184.131.21"
Resources: + 6 created
Duration: 1m58sThe deployment is complete! Use pulumi stack output externalIp to see the IP of the Service that we just deployed:
pulumi stack output externalIp35.184.131.21The Jenkins instance we just deployed is reachable through port 80 of the external IP address. You can now
visit http://35.184.131.21/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 usingtype: "ClusterIP"instead, runkubectl port-forward svc/jenkins 8080:80to forward the cluster port to the local machine and access the service vialocalhost:8080.
When you’re ready to be done with Jenkins, you can destroy the instance:
pulumi destroyDo you want to perform this destroy? yesDestroying (dev): Type Name Status - pulumi:pulumi:Stack kubernetes-ts-jenkins-dev deleted - └─ jenkins:jenkins:Instance dev deleted - ├─ kubernetes:core:Secret dev-secret deleted - ├─ kubernetes:core:PersistentVolumeClaim dev-pvc deleted - ├─ kubernetes:core:Service dev-service deleted - └─ kubernetes:apps:Deployment dev-deploy deleted
Outputs: - externalIp: "35.184.131.21"
Resources: - 6 deleted
Duration: 36s