写点什么

kubernetes 下 jenkins 实战 maven 项目编译构建

作者:程序员欣宸
  • 2022-11-17
    广东
  • 本文字数:1591 字

    阅读完需:约 5 分钟

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 脚本:


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 ,分别用来跳过单元测试和文档生成;


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:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...


发布于: 刚刚阅读数: 3
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018-04-19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
kubernetes下jenkins实战maven项目编译构建_DevOps_程序员欣宸_InfoQ写作社区