kubernetes 下 jenkins 实战 maven 项目编译构建
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
关于 kubernetes 环境的 jenkins 集群
在 kubernetes 环境部署的 jenkins 集群,执行任务时会新建 pod,任务完成后 pod 被销毁,架构如下:
kubernetes 搭建 jenkins 集群的细节请参考《Helm部署和体验jenkins》;
编译构建 maven 项目
本文是《kubernetes下的jenkins如何设置maven》的续篇,前面已做好了 maven 相关的设置,今天找一个热门的开源 maven 项目,创建一个 pipeline 任务去编译这个 maven 项目,并且将结果输出到宿主机上;
本文选择了 spring-cloud-alibaba 用来实战,这是个父子结构的 maven 工程;
环境信息
kubernetes:1.15
jenkins:2.190.2
maven:3.6.3
spring-cloud-alibaba:2.1.1.RELEASE
创建 pipeline 任务
新建任务,点击下图红框:
如下,输入任务名字,然后选择 流水线 :
以下是 Pipeline 脚本:
上述脚本有以下几点需要注意:
a. lable 等于 my-jenkins-jenkins-slave ,这个要和 Pod Templates 设置中的标签列表保持一致,如下图红框所示:
b. 编译构建的命令是 mvn clean package -U -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -s /home/jenkins/settings/settings.xml ,这里面使用了指定位置的 settings.xml 文件,该文件来自 configmap 的挂载,这样就用上了自定义的 settings.xml,里面可以配置局域网的 nexus 信息;
c. 为了缩短编译构建时间,mvn 命令中使用了参数 -Dmaven.test.skip=true 和 -Dmaven.javadoc.skip=true ,分别用来跳过单元测试和文档生成;
d. 构建结果被复制到 /home/jenkins/jenkinsoutput/ ,这个路径已经被映射到宿主机的 /usr/local/jenkinsoutput/ 目录,因为只是演示,所以这里只复制了一个子工程的构建结果;
e. 清理阶段的 mvn clean 其实没什么意义,因为 pod 很快就会被销毁,这里只是个参考作用,如果有远程资源或者数据库相关的清理操作可以在此执行;
点击底部的 Save 保存;
执行 pipeline 任务
点击下图红框中的 Build Now 即可开始执行任务:
如果局域网内部署了 Nexus,并且在 settings.xml 中做了相关设置,只要 Nexus 中缓存过相关的 jar,整个任务能在几分钟内完成,如下图:
在任务完成之前,执行命令 kubectl describe pod xxxxx -n helm-jenkins ,以确定 pod 是在哪个宿主机上执行的,待任务结束后,去查看此机器的 /usr/local/jenkins_output 目录,可见构建结果已经复制过来了,如下:
至此,实战完成,我们在 kubernetes 下的 jenkins 环境中,用 pipeline 任务成功的编译构建了开源项目 spring-cloud-alibaba 的源码,并取得了构建结果,这样的环境和 pipeline 只需做一些定制调整,就可以打造成符合自己要求的 CI 环境了,希望本文能带给您一些参考;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/994971979747bf1f47f81a448】。文章转载请联系作者。
评论