02-jenkins基于k8s的动态save-结合jenkins共享库测试动态agent
- 共享库(Shared Library)- 开发人员可以将常用的构建逻辑封装为可复用的代码库,并在多个Jenkinsfile中引用。- Jenkins Shared Library 通常都是通过Git或其他版本控制进行管理- 简单易懂,开始实验测试,冲~~~
·
在jenkins中配置k8s动态节点
- jenkins动态资源好处在于,用到时直接启动所需pod工作完下班完事
- 方便快捷,分工明确,备份打包到新的环境也便捷
- jenkins在k8s上配置动态节点,需要用到1个或多个,
- jnlp容器,这个容器用于连接jenkins
- 其他容器,用于直接流水线其他相应动作
- 简单易懂,直接上手
安装插件
添加凭据提供者配置

配置凭证
生成 cert.pfx 证书
cat /root/.kube/config
# 找到certificate-authority-data: 把这个内容复制出来......LS0tLS.....1PUZJQ0FURS0t.....LS0tCg==
echo ....... | base64 -d > ca.crt
# 找到client-certificate-data: 把这个内容复制出来......................
echo ....... | base64 -d > client.crt
# 找到client-key-data: 把这个内容复制出来......................
echo ....... | base64 -d > client.key
# 然后生成pfx文件
openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
Enter Export Password: 123456 # 记住这个密码,要配置到jenkins里去的
Verifying - Enter Export Password: 123456
配置jenkins凭证



- 大概就是这样子,因为我已经创建过了所以请忽略红色字体

配置Clouds
- 可以理解为连接k8s做出相应动作
- 我的jenkins是2.4.x版本,直接进入系统管理就找到了




配置pod模板
- 这里配置pod模板,我常用的有两种,
- 第一种是在jenkins-web端配置
- 第二种是在流水线脚本中配置
- 个人比较喜欢在代码中配置,迁移和管理都比较方便
- 先说说第一种
在jenkins管理页面配置pod模板(pod Template)




-
然后其他都默认就好
-
使用pipeline测试
pipeline {
agent {
kubernetes {
inheritFrom 'Test-maven'
}
}
stages {
stage('Test-maven....') {
steps {
container('maven'){
sh 'mvn -v'
}
}
}
}
}
初识jenkins共享库
- 共享库(Shared Library)
- 开发人员可以将常用的构建逻辑封装为可复用的代码库,并在多个Jenkinsfile中引用。
- Jenkins Shared Library 通常都是通过Git或其他版本控制进行管理
- 简单易懂,开始实验测试,冲~~~
配置Library运行环境



- 配置完保存即可
- 然后就可以测试使用啦~~~
Test jenkins shared library
-
结合jenkins共享库封装jenkins动态节点的资源清单
-
用到什么容器就拉起对应pod构建自己想要的流程
-
git的目录结果大概这样
├── jenkinsfile
│ ├── Test-jenkinslib.jenkinsfile
│ └── Test-xxxxxxx1.jenkinsfile
│ └── Test-xxxxxxx2.jenkinsfile
├── src # 共享库存放目录
│ ├── org
│ │ ├── devops
│ │ │ └── xxxx1.groovy
│ │ │ └── xxxx2.groovy
│ │ │ └── KubeTools.groovy
├── vars # 变量,后面用到再解释
│ ├── README.md
└── README.md
将pod模板配置成共享库
-
这里简单使用kubectl容器测试
-
这里再次声明~~~
不管你启动多少个容器,你要使用jenkins动态节点,那么必须是要有jnlp这个容器的
如果你不指定启动,那么我们jenkins会帮你起来,你只需要保证我们可以正常拉取到这个镜像就可以了
如果拉取不到只能自己想办法去拉取:
jenkins/inbound-agent:4.13-1-jdk8镜像了
src/org/devops/KubeTools.groovy
package org.devops
import groovy.json.JsonSlurper
class KubeTools {
def getPodYaml() {
return '''
apiVersion: v1
kind: Pod
metadata:
app: Test-Rocketmq
spec:
imagePullSecrets:
- name: ctr-secret
containers:
- name: kubectl
image: 'godocker.com/devops/kubectl:v1'
imagePullPolicy: IfNotPresent
'''
}
}
引用共享库的pod模板
@Library('jenkinslib') _ 就是刚刚在jenkins的系统配置-->Library里配置的
jenkinsfile/Test-kubectl-PodTemplate.jenkinsfile
@Library('jenkinslib') _
def kubeTools = new org.devops.KubeTools()
pipeline {
agent none
stages {
stage('Deploy to Kubernetes') {
agent {
kubernetes {
label 'my-k8s-agent'
yaml kubeTools.getPodYaml()
}
}
steps {
echo "Hello Slave Pod on Kubernetes!"
sh "ls /usr/local/bin/kubectl && ls /root/.kube/config"
sh "whereis kubectl"
sh "kubectl get pod -n devops"
sh "sleep 300"
}
}
}
}
在jenkins中构建流水线项目


更多推荐



所有评论(0)