本文的目的是通过在 Kubernetes 集群上创建并配置 Jenkins Server ,实现应用开发管理的 CI/CD 流程,并且利用 Kubernetes-Jenkins-Plugin 实现动态的按需扩展 jenkins-slave。
安装
本文所需代码在这里
推送 Jenkins Master Docker 镜像到 Harbor
1 2 3
| $ cd master $ docker build -t 172.31.21.226/ideal/jenkins:lts . $ docker push 172.31.21.226/ideal/jenkins:lts
|
推送 Jenkins Slave Docker 镜像到 Harbor
1 2 3
| $ cd slave $ docker build -t 172.31.21.226/ideal/jnlp-slave:latest . $ docker push 172.31.21.226/ideal/jnlp-slave:latest
|
安装 Jenkins
1 2
| $ kubectl apply -f https://raw.githubusercontent.com/batizhao/dockerfile/master/k8s/jenkins/service-account.yml $ kubectl apply -f ./
|
Kubernetes 插件
安装
略过。
配置
系统管理 - 系统设置 - 云 - Kubernetes
1 2 3
| Name: kubernetes Kubernetes URL: https://kubernetes.default Jenkins URL: http://jenkins.default:8080
|
如果 service account 没有问题,点击 test,应该可以看到 Connection test successful。

系统管理 - 系统设置 - 云 - Kubernetes - Add Pod Template
1 2 3 4 5 6 7 8 9 10 11
| images - Add Pod Template: Name: jnlp-slave Labels: jnlp-slave
Containers: Name: jnlp Docker image: 172.31.21.226/ideal/jnlp-slave:latest Always pull image: yes Jenkins slave root directory: /home/jenkins Host path: /var/run/docker.sock Mount path: /var/run/docker.sock
|


Jenkins Job
非 pipeline 方式



pipeline 方式
直接实现 groovy 脚本,可以放到 git 中管理。
1 2 3 4 5 6 7 8
| podTemplate(label: 'jnlp-slave') { node('jnlp-slave'){ git branch: 'master', credentialsId: 'e242d1e1-58b5-4645-a84e-64f957e32016', url: 'https://gitee.com/idealsoftone/poseidon.git' sh 'sleep 120' build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() echo build_tag } }
|
这里指定 jenkins slave 为插件中配置的 jnlp-slave。

