jenkins mvn pipeline (docker 编译 发布还未生成镜像)

jenkins pipeline file

currentBuild.description="${BRANCH}_${ENV}"
pipeline{
    agent { 
        node {
            label 'master'
            customWorkspace "workspace/${JOB_NAME}_${ENV}"
        }
   }

    post {
        success {
            sh '''
                curl -H "Content-Type: application/json" -X POST -d '{"branch":"'${BRANCH}'","project_name":"'${PROJECT_NAME}'","test_env":"'${ENV}'","artifact":"'`${ID}`'"}' http://hbtc.houbank.net:8000/api/release/artifactInfo/
                '''
        }
    }    
    
    options {
        //保持构建的最大个数
        buildDiscarder(logRotator(numToKeepStr: '10'))
    }
    parameters {
        choice(name: 'ENV', choices: 'mit\nsit\nuat\nprod', description: 'env')
        string(name: 'STATUS', defaultValue: '改造后', description: '环境变量迁入配置中心')
        string(name: 'BRANCH', defaultValue: '${gitlabSourceBranch}', description: '选择发布的分支,默认为git触发分支')
        string(name: 'GIT', defaultValue: 'https://code.houbank.net/project/kuaiyipai_server.git', description: 'git地址')
    }
    environment {
        LOB = "telesale" //业务线
        postfix="jar"
        TARGET_FILE="kuaiyipai-app-api/target/kuaiyipai-app-api.${postfix}"
        PACKAGE_PATH_old="/var/jenkins_home/package/$LOB/${PROJECT_NAME}/${ENV}" //项目改造前包目录
        PACKAGE_PATH_new="/var/jenkins_home/package/$LOB/${PROJECT_NAME}/prod" //项目改造后包目录
        ID="git rev-parse ${params.BRANCH}"
        PROJECT_NAME = "${JOB_BASE_NAME}"  // 工程名字
        GIT_ADDRESS="${params.GIT}" //GIT地址
        SAVE_FILE_NUM=3 //保留历史质品数量,实际保留2天
    }
    stages {
        stage('检出代码'){
            steps {
                git(
                    url: "${GIT_ADDRESS}",
                    credentialsId: '23477e7c-edd5-48a1-a0e4-acfb57c55687',
                    branch: "${params.BRANCH}"
                )
            }
         }
        stage('带参编译打包'){
            when {
            not { environment name: 'STATUS',value: '改造后' }
            }
            agent {
                docker {
                    image 'maven:3.5.3'
                    args '-v /root/.m2:/root/.m2'
             }
            }
            steps {
                sh '''
                    cd ${WORKSPACE}
                    if [ ! -d ${PACKAGE_PATH_old} ];then
                        mkdir -p ${PACKAGE_PATH_old}
                    fi
                    if [ ! -f ${PACKAGE_PATH_old}/${PROJECT_NAME}_`${ID}`.${postfix} ];then
                        mvn clean package -U -Dmaven.test.skip=true -Dmaven.compile.fork=true  -P${ENV}
                       
                    else
                        echo "file exist"
                    fi
                '''
                }
            }

        
        stage('不带参编译打包') {
            when { environment name: 'STATUS',value: '改造后' }
            agent {
                docker {
                    image 'maven:3.5.3'
                    args '-v /root/.m2:/root/.m2'  
        }
            }
            steps {
                sh '''
                cd ${WORKSPACE}
                if [ ! -d ${PACKAGE_PATH_new} ];then
                    mkdir -p ${PACKAGE_PATH_new}
                fi
                if [ ! -f ${PACKAGE_PATH_new}/${PROJECT_NAME}_`${ID}`.${postfix} ];then
                    mvn clean package -U -Dmaven.test.skip=true -Dmaven.compile.fork=true
                else
                    echo "file exist"
                fi
                '''
               }
             }
             
         stage ('改造前 分发仓库'){
            when {
            not { environment name: 'STATUS',value: '改造后' }
            }
            steps {
                sh '''
                    if [ ! -f ${PACKAGE_PATH_old}/${PROJECT_NAME}_`${ID}`.${postfix} ];then
                        ls -t ${PACKAGE_PATH_old} | tail -n +${SAVE_FILE_NUM} | xargs rm -f
                        cp -rf ${WORKSPACE}/${TARGET_FILE} ${PACKAGE_PATH_old}/${PROJECT_NAME}_`${ID}`.${postfix}
                    else
                        echo "file exits"
                    fi
                '''
            }
        }

        stage ('改造后 分发仓库'){
            when { environment name: 'STATUS',value: '改造后' }
            steps {
                sh '''
                    if [ ! -f ${PACKAGE_PATH_new}/${PROJECT_NAME}_`${ID}`.${postfix} ];then
                        ls -t ${PACKAGE_PATH_new} | tail -n +${SAVE_FILE_NUM} | xargs rm -f
                        cp -rf ${WORKSPACE}/${TARGET_FILE} ${PACKAGE_PATH_new}/${PROJECT_NAME}_`${ID}`.${postfix}
                    else
                        echo "file exits"
                    fi
                '''
            }
        }
        
        stage('改造前环境发布'){
            when {
              allOf {
                not {environment name: 'ENV',value: 'prod'}
                not {environment name: 'STATUS',value: '改造后'}
                    }
                  }
            steps {
              sh '''
                /usr/bin/ansible-playbook -i /app/ansible/hosts /app/ansible/deploy.yml  -e "env=${ENV} lob=${LOB}
                groupname=${PROJECT_NAME} id=`${ID}`"  -e"@/app/ansible/group_vars/${PROJECT_NAME}"
                '''
                }
              }
        stage('改造后环境发布'){
            when {
              allOf {
               environment name: 'STATUS',value: '改造后'
               not {environment name: 'ENV',value: 'prod'}
                     }
                  }
            steps {
              sh '''
                ansible-playbook -i /app/ansible/hosts /app/ansible/deploy.yml  -e "env=${ENV} lob=${LOB} groupname=${PROJECT_NAME}
                id=`${ID}` remote_path=http://192.168.13.9:81/jenkins/${LOB}/${PROJECT_NAME}/prod"  -e"@/app/ansible/group_vars/${PROJECT_NAME}"
                '''
                }
              }
       }
  }
pipeline show

猜你喜欢

转载自www.cnblogs.com/Chen-PY/p/11207708.html