在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构以下所示:
在kubernetes搭建jenkins集群的细节,请参考《Helm部署和体验jenkins》java
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很快就会被销毁,这里只是个参考做用,若是有远程资源或者数据库相关的清理操做能够在此执行;git