关于云计算:kubernetes下jenkins实战maven项目编译构建

34次阅读

共计 2187 个字符,预计需要花费 6 分钟才能阅读完成。

对于 kubernetes 环境的 jenkins 集群

在 kubernetes 环境部署的 jenkins 集群,执行工作时会新建 pod,工作实现后 pod 被销毁,架构如下所示:

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

编译构建 maven 我的项目

  • 本文是《kubernetes 下的 jenkins 如何设置 maven》的续篇,后面咱们做好了 maven 相干的设置,当初找一个热门开源 maven 我的项目,创立一个 pipeline 工作去编译这个 maven 我的项目,并且将后果输入到宿主机上;
  • 本文抉择了 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 工作

  • 新建工作,点击下图红框:

  • 如下,输出工作名字,而后抉择 ” 流水线 ”:

  • 以下是 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

正文完
 0