Jenkins打包Docker镜像的配置
Jenkins配置kubernetes插件及DinD
前面使用Helm在k8s中安装了Jenkins。使用podTemplate在k8s动态创建Agent。
这里预先创建几个podTemplate,用于动态创建agent。(关注下下面additionalAgents的配置)
[root@jingmin-kube-archlinux k8s]# helm install jenkins -f ./jenkins/my-override-values.yaml ./jenkins
[root@jingmin-kube-archlinux k8s]# cat jenkins/my-override-values.yaml
controller
#...
agent:
enabled: true
additionalContainers: []
disableDefaultAgent: false
podTemplates: {}
additionalAgents:
dind:
podName: dind-agent
customJenkinsLabels: dind-agent
image: docker.io/warrior7089/dind-client-jenkins-agent
tag: latest
envVars:
- name: DOCKER_HOST
value: "tcp://localhost:2375"
alwaysPullImage: true
yamlTemplate: |-
spec:
containers:
- name: dind-daemon
#image: docker:20.10-dind
image: docker:dind
args: ["--mtu=1350"]
securityContext:
privileged: true
env:
- name: DOCKER_TLS_VERIFY
value: ""
- name: DOCKER_TLS_CERTDIR
value: ""
#...
这里说明一下:
-
controller对应的是Jenkins管理台,GUI界面访问的就是这里。agent是实际执行job的节点。controller用于编辑和管理agent, 创建和管理jobs,…。
-
添加了个additionalAgents (podTemplate),继承于默认的agent配置。这里dind-agent代表的一类agent,可以提供docker环境(DinD,Docker in Docker,不会污染宿主docker环境)。当Jenkinsfile中指定了这里的agent标签dind-agent时,k8s会动态创建出相应的agent(pod)来执行job。
Jenkins pipeline中使用Jenkinsfile编写任务,可以通过agent 标签指定用到的agent。helm安装jenkins,默认安装了kubernetes插件,可以在需要的时候,在k8s中动态创建agent执行job。


可以看到,GUI界面,dashboard->manage jenkins->cloud->kubernetes->configure下,已经出现了helm中设置的几个additionalAgent (这里显示为Pod Template)
如果要使用这里的专用的agent,需要在Jenkinsfile中指定agent
pipeline {
agent {
kubernetes{
inheritFrom 'dind-agent'
}
}
}
当然也可以同时使用多个专用agent,只需在inhertFrom字段后面指定多个专用agent即可
参考:https://plugins.jenkins.io/kubernetes/#plugin-content-inheritance
参考: https://www.jenkins.io/doc/pipeline/steps/kubernetes/
发表回复