对于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脚本:
pipeline { agent { label 'my-jenkins-jenkins-slave' } tools { maven 'mvn-3.6.3' } stages { stage('Checkout') { steps { echo '从GitHub下载spring-cloud-alibaba工程的源码(2.1.1.RELEASE归档包)' sh 'wget https://github.com/alibaba/spring-cloud-alibaba/archive/v2.1.1.RELEASE.tar.gz' echo '下载完结,解压归档包' sh 'tar -zxf v2.1.1.RELEASE.tar.gz' } } stage('Build') { steps { echo '开始编译构建' sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean package -U -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -s /home/jenkins/settings/settings.xml' } } stage('Save') { steps { echo '将构建后果保留到宿主机' sh 'cd spring-cloud-alibaba-2.1.1.RELEASE/spring-cloud-alibaba-nacos-discovery/target && cp ./*.jar /home/jenkins/jenkins_output/' echo '传送结束' } } stage('Clean') { steps { echo '清理Maven工程' sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean' echo '清理结束' } } }}
上述脚本有以下几点须要留神:
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,别离用来跳过单元测试和jave文档制作;
d. 构建后果被复制到/home/jenkins/jenkins_output/,这个门路曾经被映射到宿主机的/usr/local/jenkins_output目录,因为只是演示,所以这里只复制了一个子工程的构建后果;
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环境了,心愿本文能带给您一些参考;
欢送关注我的公众号:程序员欣宸
https://github.com/zq2599/blog_demos