jenkins-3:使用jenkinsfile在kubernetes中创建jnlp完成一个简单构建
前置阅读:
目录:
(1).准备jenkinsfile
(2).创建测试任务完成构建
(3).参考资料
(1).准备jenkinsfile
先要开一个git工程存放jenkinsfile,我在码云上建了个工程:
https://gitee.com/future-cicd/jenkinsfile
jenkinsfile在这个工程下的目录是:
kubernetesfile/fist-simple-jenkinsfile.file
语法解释:
#这个label是定义podTemplate的label,node要和这个匹配,才能正确对应。
def label = "jenkinsfile-pod-template"
#cloud:是之前文章中在jenkins中配置的k8s-cloud的名称。
#nodeSelector:是声明这个jnlp-pod必须在有这个label的node上分布。
podTemplate(label: label, cloud: 'kubernetes',nodeSelector: 'jenkins-jnlp=yes',
containers: [
containerTemplate(
name: 'jnlp',
image: 'jenkins/inbound-agent:4.11-1-jdk11',
ttyEnabled: true,
alwaysPullImage: false,
#覆盖默认jnlp必须写这个args
args: '${computer.jnlpmac} ${computer.name}'),
containerTemplate(
name: 'just-test',
image: 'jenkins/inbound-agent:4.11.2-4',
ttyEnabled: true,
alwaysPullImage: false,
command: 'cat')
]
)
{
node (label) {
stage('test-jnlp'){
container('jnlp'){
echo 'hello, I am jnlp container.'
}
}
stage('test-just-test'){
container('just-test'){
echo 'hello, I am just-test container.'
}
}
}
}
(2).创建测试任务完成构建
新建jenkins流水线任务test1:
因为这个是公有仓库,所以不需要添加凭据。
脚本路径是jenkinsfile在git中的路径。
然后执行构建:发现报错。
因为没有给node打标签,podTemplate中的nodeSelector找不到可以执行的节点。
kubectl label nodes future jenkins-jnlp=yes
再次执行构建,OK。
(3).参考资料
1.Cannot start jenkins agent pod from podTemplate in a separate yaml file
https://issues.jenkins.io/browse/JENKINS-66058
2.Kubernetes plugin for Jenkins
https://plugins.jenkins.io/kubernetes/#documentations