• jenkins 持续集成笔记2 --- 构建 Java 项目


    先说一下流程:
    jenkinsgitlab pull 代码,使用 maven 打包,然后备份原来的jar包,使用rsync同步到服务器上,重启服务。

    pipeline 资源去看官方中文文档
    https://jenkins.io/zh/doc/#doc/pipeline/tour/getting-started#

    讲解下这个jenkins pipeline 。

    
    node {
        stage('Deliver') {
            if (env.Deliver == 'deploy') {
                cleanWs()
    			git branch: 'develop', credentialsId: 'a60ae6df-f9e1-4844-809e-852be898f8f9', url: 'http://192.168.1.2/xx-apps/test.git'			
    			sh label: '', script: '''cd ${WORKSPACE}/ && mvn clean package -Dmaven.test.skip=true  -Pprod
    			ansible micros -m script -a "/root/micros_rsync_add.sh ${JOB_NAME}"
    			ansible 172.18.11.150 -m script -a "/data/spring/backup.sh ${JOB_NAME}"
    			rsync -avz ${WORKSPACE}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt
    			rsync -avz ${WORKSPACE}/target/${JOB_NAME}.jar xx@172.18.11.151::${JOB_NAME} --password-file=/etc/passwd.txt
    			ansible 172.18.11.150 -m systemd -a "name=${JOB_NAME} state=restarted"
    			sleep 10
    			ansible 172.18.11.151 -m systemd -a "name=${JOB_NAME} state=restarted"'''
    			archiveArtifacts 'target/${JOB_NAME}.jar'
            } else {
                sh label: '', script: '''rsync -avz  ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${version}/archive/${JOB_NAME}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt  
    rsync -avz  ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${version}/archive/${JOB_NAME}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt 
    ansible 172.18.11.150 -m systemd -a "name=${JOB_NAME} state=restarted"
    sleep 10
    ansible 172.18.11.151 -m systemd -a "name=${JOB_NAME} state=restarted"'''
            }
        }
    }
    

    这是一个 if/else 条件,

    env.Deliver == 'deploy'
    

    对应 jenkins 参数化构建过程 --> 选项参数,如图

    Build with Parameters选的是 deploy 会执行如下 pipeline 代码:

    # 清空当前目录
    cleanWs()
    # 从 develop 分支拉取代码
    git branch: 'develop', credentialsId: 'a60ae6df-f9e1-4844-809e-852be898f8f9', url: 'http://192.168.1.2/xx-apps/test.git'
    # sh label: '', script: ''' ''' 这里面全都是 shell 脚本 		
    # ${WORKSPACE} 就是这个任务的根目录,即 /root/.jenkins/workspace/test。进到代码所在目录Maven 打包
    sh label: '', script: '''cd ${WORKSPACE}/ && mvn clean package -Dmaven.test.skip=true  -Pprod
    # 同步机制
    ansible micros -m script -a "/root/micros_rsync_add.sh ${JOB_NAME}"
    # 备份服务器上的 jar 包
    ansible 172.18.11.150 -m script -a "/data/spring/backup.sh ${JOB_NAME}"
    # jenkins 的新包同步到服务器上
    rsync -avz ${WORKSPACE}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt
    rsync -avz ${WORKSPACE}/target/${JOB_NAME}.jar xx@172.18.11.151::${JOB_NAME} --password-file=/etc/passwd.txt
    # 重启服务 {JOB_NAME} 即 jenkins 的任务名
    ansible 172.18.11.150 -m systemd -a "name=${JOB_NAME} state=restarted"
    sleep 10
    ansible 172.18.11.151 -m systemd -a "name=${JOB_NAME} state=restarted"'''
    # 如果构建成功,就存档
    archiveArtifacts 'target/${JOB_NAME}.jar'
    

    流程如下:

    • 清空目录
    • pull code 、 构建 jar 包
    • 备份服务器上的 jar 包
    • 用新的 jar 包替换服务器上的 jar 包
    • 重启服务
    • 存档

    如果选的是 else,则执行如下代码:

    # 这里回滚执行的是 deploy 时的存档
    sh label: '', script: '''rsync -avz  ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${version}/archive/${JOB_NAME}/target/${JOB_NAME}.jar xx@172.18.11.150::${JOB_NAME} --password-file=/etc/passwd.txt  
    rsync -avz  ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${version}/archive/${JOB_NAME}/target/${JOB_NAME}.jar xx@172.18.11.151::${JOB_NAME} --password-file=/etc/passwd.txt 
    # 重启服务
    ansible 172.18.11.150 -m systemd -a "name=${JOB_NAME} state=restarted"
    sleep 10
    ansible 172.18.11.151 -m systemd -a "name=${JOB_NAME} state=restarted"'''
    

    下面截图展示,如何新建一个 JAVA 项目:
    Jenkins --> 新建任务

    发布

    发布成功后:

    回滚

    version 就是对应 build history 那里的 build id。
    比如你这次构建是 11,你要回滚到上一次的,version 那里就填 10

  • 相关阅读:
    桥接模式
    单例模式
    SpringAOP aspectJ ProceedingJoinPoint 获取当前方法
    springMVC实现文件下载
    JAVA的变量初始化类成员变量和局部变量区别
    JAVA枚举类型的应用
    linux下svn命令大全
    转:shell脚本的一些注意事项
    转: linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)
    TCP三次握手/四次挥手详解
  • 原文地址:https://www.cnblogs.com/fsckzy/p/11855676.html
Copyright © 2020-2023  润新知