zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    关于celery踩坑
    关于git的分批提交pull requests流程
    SymGAN—Exploiting Images for Video Recognition: Heterogeneous Feature Augmentation via Symmetric Adversarial Learning学习笔记
    AFN—Larger Norm More Transferable: An Adaptive Feature Norm Approach for Unsupervised Domain Adaptation学习笔记
    Learning to Transfer Examples for Partial Domain Adaptation学习笔记
    Partial Adversarial Domain Adaptation学习笔记
    Partial Transfer Learning with Selective Adversarial Networks学习笔记
    Importance Weighted Adversarial Nets for Partial Domain Adaptation学习笔记
    Exploiting Images for Video Recognition with Hierarchical Generative Adversarial Networks学习笔记
    improved open set domain adaptation with backpropagation 学习笔记
  • 原文地址:https://www.cnblogs.com/fsckzy/p/11855676.html
Copyright © 2011-2022 走看看