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.
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.
Prerequisites#
Deploying the example#
-
Create a new stack:
Terminal window pulumi stack init dev -
Create configuration keys for the root username and password for the Jenkins instance we are about to create:
Terminal window pulumi config set username <your desired username>pulumi config set password <your desired password> --secret -
Set the minikube values. MetalLB is required for
LoadBalancerservices on minikube. You will either need to enable it yourself withminikube addons enable metallbor setenableMetalLBtotrue:Terminal window pulumi config set isMinikube true # set to false if you are not using minikubepulumi config set enableMetalLB true -
Install dependencies:
Terminal window npm install -
Deploy the stack:
Terminal window pulumi upUpdating (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 createdOutputs:externalIp: "35.184.131.21"Resources:+ 6 createdDuration: 1m58s -
The deployment is complete! Use
pulumi stack output externalIpto see the IP of the Service that we just deployed:Terminal window 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/loginin 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.
Cleaning up#
Once you’re finished experimenting, you can destroy your stack and remove it to avoid incurring any additional cost:
pulumi destroypulumi stack rm