专栏首页实战dockerkubernetes下jenkins实战maven项目编译构建

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

关于kubernetes环境的jenkins集群

在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下:

kubernetes搭建jenkins集群的细节请参考《Helm部署和体验jenkins》

编译构建maven项目

  1. 本文是《kubernetes下的jenkins如何设置maven》的续篇,前面已做好了maven相关的设置,今天找一个热门的开源maven项目,创建一个pipeline任务去编译这个maven项目,并且将结果输出到宿主机上;
  2. 本文选择了spring-cloud-alibaba用来实战,这是个父子结构的maven工程;

环境信息

  1. kubernetes:1.15
  2. jenkins:2.190.2
  3. maven:3.6.3
  4. spring-cloud-alibaba:2.1.1.RELEASE

创建pipeline任务

  1. 新建任务,点击下图红框:
  1. 如下,输入任务名字,然后选择流水线:
  1. 以下是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很快就会被销毁,这里只是个参考作用,如果有远程资源或者数据库相关的清理操作可以在此执行;

  1. 点击底部的Save保存;

执行pipeline任务

  1. 点击下图红框中的Build Now即可开始执行任务:
  1. 如果局域网内部署了Nexus,并且在settings.xml中做了相关设置,只要Nexus中缓存过相关的jar,整个任务能在几分钟内完成,如下图:
  1. 在任务完成之前,执行命令kubectl describe pod xxxxx -n helm-jenkins,以确定pod是在哪个宿主机上执行的,待任务结束后,去查看此机器的/usr/local/jenkins_output目录,可见构建结果已经复制过来了,如下:

至此,实战完成,我们在kubernetes下的jenkins环境中,用pipeline任务成功的编译构建了开源项目spring-cloud-alibaba的源码,并取得了构建结果,这样的环境和pipeline只需做一些定制调整,就可以打造成符合自己要求的CI环境了,希望本文能带给您一些参考;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Helm部署和体验jenkins

    下图来自rancher官方博客,在kubernetes环境下,jenkins任务被交给各个pod执行,这些pod在需要时被创建,任务结束后被销毁,这样既能合理利...

    程序员欣宸
  • kubernetes下的jenkins如何设置maven

    在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下所示:

    程序员欣宸
  • 应用升级SpringCloud版本时的注意事项(Dalston升级到Edgware)

    手里有个Spring Cloud的工程,是服务提供者的身份,在pom.xml中配置的Spring Cloud版本是Dalston.SR5,要升级到Edgware...

    程序员欣宸
  • Jenkins 学习(1):Windows系统下安装,更改端口号

    还是小白,先放个链接:https://blog.csdn.net/ios_xumin/article/details/78125913

    Mokwing
  • Linux 查询应用进程号、端口、文件(知道其中之一查询其他)

    叨叨软件测试
  • jenkins学习之centos6.9下安装

    以下为centos6.9下测试安装: docker下安装jenkins: 更新yum源: yum -y update 安装docker: yum -...

    用户1141560
  • jenkins 时区设置

    背景 直接搭建好jenkins没有留意时间这块,执行job的时候发现,执行时间和服务器时间不对,需要设置时区 步骤 找到jenkins的启动配置,centos在...

    千往
  • kubernetes-11:jenkins容器化

    https://github.com/hepyu/k8s-app-config/tree/master/yaml/min-cluster-allinone/je...

    千里行走
  • 自动化部署之jenkins及简介

    持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,...

    拓荒者
  • 使用反向代理加速 Jenkins 插件下载

    训练营进行到 DevOps 部分了,上节课讲解 Jenkins 动态 Slave 的时候翻车了,我们知道 Jenkins 安装的时候会让我们选择安装一些推荐的插...

    我是阳明

扫码关注云+社区

领取腾讯云代金券