Jenkins 集成k8s 运行Jenkins slave(Jenkins 弹性slave)
1. 设置JNLP访问协议打开Jenkins/Configure Global Security,找到Agents,如下图,设置Port 为 Random,Agent protocols选Inbound TCP Agent Protocol/4 (TLS encryption),保存2. 安装kubernetes plugins打开Jenkins/Plugin Manager搜索kub...
目录
前言
有用Jenkins的同学,都很清楚,针对真实生产,我们一般不会只有一个Jenkins运行服务器上,基本都会选择在另外一个或多个服务器上安装Jenkins的slave。
这文章讲的就是利用k8s去动态增减slave节点,运行一个job就创建一个pod作为jenkins slave,当job做完,就删除pod,这样就可以释放资源,大大减少成本。
Jenkins 基本配置
设置JNLP访问协议
打开Jenkins/Configure Global Security,
找到Agents,如下图,设置Port 为 Random,Agent protocols选Inbound TCP Agent Protocol/4 (TLS encryption),保存
安装kubernetes plugins
打开Jenkins/Plugin Manager
搜索kubernetes并安装,结果如下:
创建Kubernetes Namespace与Service Account
创建Namespace
在Kubenates的上创建devops命名空间,用于Jenkins使用
```
kubectl create namespace devops
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190924161701558.png)
创建Service Account
在Kubernetes上为Jenkins构建创建有Cluster Admin权限的Service Account jenkins:
```
kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=devops:jenkins
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190924161912323.png)
生成调度凭证
生成Kubernetes的 server certificate key和Client P12 Certificate File
这个步骤主要是生成P12 Certificate File提供给jenkins Master去调用Kubenetes,具体步骤如下:
Kubernetes Master上,打开~/.kube/config文件,复制相对应的内容,运行以下命令分别生成生成ca.crt, client.crt, client.key
# 复制certificate-authority-data的内容,运行以下命令生成client.crt
echo "<certificate-authority-data>" | base64 -d > ca.crt
# 复制client-certificate-data的内容,运行以下命令生成client.crt
echo "<client-certificate-data>" | base64 -d > client.crt
# 复制client-key-data的内容,运行以下命令生成client.key
echo "<client-key-data>" | base64 -d > client.key
以上3个命令参考下图做法:
再根据前面步骤生成的ca.crt, client.crt和client.key来生成PKCS12格式的cert.pfx
以下命令运行时,需要输入4位以上的密码
openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
在Jenkins上集成Kubernetes
在Jenkins上配置Kubernetes Credential
将上面生成的cert.pfx复制出来备用
添加cert.pfx到Jenkins Global Credential
如下图:
在Jenkins上配置Kubernetes Cloud
打开Manage Jenkins/Configure System, 找到Cloud ,点击Add a new cloud,选择Kubernetes
输入Name,比如kubernetes
复制上面步骤生成的ca.crt文件内容到Kubernetes server certificate key
输入上面创建的Kubernetes Namespace,devops
选择刚刚配好的Credential
点击“Test Connection"按钮测试Jenkins是否可以成功连接Kubernetes。
Pod Retention选择Never,这样每次Jenkins构建结束后(无论成功和失败)都会销毁Pod,达到动态创建和运行Jenkins Build Agent的目的。
在Jenkins上配置Kubernetes Pod Template
继续第7部后续,点击 Add Pod Template
输入Name, 如:Jenkins_slave_practice
输入Namespace,devops
输入Labels, 如: Jenkins_slave_practice
点击Add Container
添加第一个Container
输入Name:jnlp
输入Docker image:jenkins/jnlp-slave:3.27-1-alpine
输入Working directory:/home/jenkins
继续添加第二个Container
输入Name:maven
输入Docker image:maven:3.6-jdk-8-alpine
输入Working directory:/home/jenkins
输入Command to run: /bin/sh -c
输入Arguments to pass to the command:cat
如图:
找到Volumes, 点击Add Volume,选择Host Path Volume
输入Host Path : /root/.m2
输入Mount Path: /root/.m2
创建声明式Pipeline,调用Jenkins Slave
创建一个Jenkins Pipeline来测试Jenkins是否可以动态地在Kubernetes上创建和运行Build Agent。
使用了Maven的Pipeline实例:
pipeline {
agent {
node {
label 'Jenkins_slave_practice'
}
}
stages {
stage('Init') {
steps{
script{
println "welcome to Nick learn"
}
}
}
stage('maven') {
steps{
script{
container('maven') {
sh 'mvn -v'
}
}
}
}
}
}
结果如下:
更多推荐
所有评论(0)