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


    关于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

  • 相关阅读:
    显示多行字符串
    dowhile
    获取系统的相关文件夹
    DLL 实际应用版本
    ShellExecute
    LoadLibrary
    MFC DLL的创建
    在DLL中存放资源
    替换字符串
    RemoveDirectoryB
  • 原文地址:https://www.cnblogs.com/bolingcavalry/p/13763784.html
Copyright © 2020-2023  润新知