在 kubernetes 1.8 上部署 Jenkins 动态集群

本文的目的是通过在 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。