pipeline文本内容
单个gitlab仓库下通过一个pom.xml编译多个项目部署

pipeline {
    agent any
    parameters {
        gitParameter(name: 'BRANCH_TAG', type: 'PT_BRANCH_TAG', branchFilter: 'origin/(.*)', defaultValue: 'main', selectedValue: 'DEFAULT', sortMode: 'DESCENDING_SMART', description: '请选择需要部署的代码:')
        choice(name: 'mode', choices: ['deploy','rollback'], description: '请选择发布或者回滚?')
        extendedChoice(name: 'ProjectName', 
                       type: 'PT_CHECKBOX', 
                       description: '请勾选所要发布的项目模块', 
                       quoteValue: false, 
                       saveJSONParameterToFile: false, 
                       value: 'neex-spot-adminserver,neex-spot-eventlogger,neex-spot-eventprocessor,neex-spot-bardatabuilder,neex-spot-resultlogger,neex-spot-resultprocessor,neex-spot-marketdataserver,neex-spot-dispatch,neex-spot-dispatch-orderbook,neex-spot-userdataserver', 
                       visibleItemCount: 10, 
                       multiSelectDelimiter: ',',
                       defaultValue: 'neex-spot-adminserver,neex-spot-eventlogger,neex-spot-eventprocessor,neex-spot-bardatabuilder,neex-spot-resultlogger,neex-spot-resultprocessor,neex-spot-marketdataserver,neex-spot-dispatch,neex-spot-dispatch-orderbook,neex-spot-userdataserver'
		)      
        string(name: 'ENVMENT', defaultValue: 'prod', description: '环境参数')
    }    
    tools{
        jdk 'java8'
        maven 'Maven-prod'
    }
    environment {
        project_location = "neex/${iname}"
	    project_list =  "$params.ProjectName"
	    //ENVMENT = "${BRANCH_TAG}"
    }


    stages{
        stage('clean'){
            steps {
              cleanWs(
                  cleanWhenAborted: true, 
                  cleanWhenFailure: true, 
                  cleanWhenNotBuilt: true, 
                  cleanWhenSuccess: true, 
                  cleanWhenUnstable: true, 
                  cleanupMatrixParent: true, 
                  disableDeferredWipeout: true,
                  deleteDirs: true
              )
            }    
        }         
        stage('从 gitlab 中拉取代码') {
            steps {
                deleteDir()
                checkout([$class: 'GitSCM', 
                    branches: [[name: "${BRANCH_TAG}"]],
                    gitTool: 'Default', 
                    userRemoteConfigs: [[url: 'https://gitlab.yunson.com/bk/spot/spot.git', credentialsId: 'gitlab-deploy',]]
                ])
            }
        }        
        stage('mvn install') {
            steps {
                script{
                    sh '''
                        cp -rf /var/jenkins_home/tools/adminserver-prod.json neex/neex-spot-adminserver/src/main/resources/global.json
                        cp -rf /var/jenkins_home/tools/bitzmartserver-prod.json bitzmart/bitzmart-admin/bitzmart-admin-server/src/main/resources/global.json
                        sed -i 's/X.X.X.X:8081/172.16.0.60:18081/g' pom.xml
                        mvn clean install -DskipTests
                    '''
                }
            }
        }
        stage('Build docker image'){
            steps{
                script{
                    if ( env.ProjectName.isEmpty() ) {
                        echo "ProjectName not specified."
                        autoCancelled = true
                        error('Aborting the build.')
                    }
                    else {
                        for (iname in ProjectName.tokenize(',')) {
                            sh "docker build --build-arg JOB_NAME=${iname} -t harbor.yunson.com/bk/${iname}:${ENVMENT} ."
                        }
                   }
                }
            }
        }
        stage('Push image to hub'){
            steps{
                script{
                    withCredentials([usernamePassword(credentialsId: 'harbor-secret-prod', passwordVariable: 'password', usernameVariable: 'username')]) {
                    sh 'docker login -u ${username} -p ${password}  harbor.yunson.com'
                    }
                    if ( env.ProjectName.isEmpty() ) {
                        echo "ProjectName not specified."
                        autoCancelled = true
                        error('Aborting the build.')
                    }
                    else {
                        for (iname in ProjectName.tokenize(',')) {                    
                            sh """
                                docker push harbor.yunson.com/bk/${iname}:${ENVMENT}
                                docker rmi harbor.yunson.com/bk/${iname}:${ENVMENT}
                            """
                        }
                    }
                }
            }
        }
        stage('deploy Server'){
            steps{
                script{
                    if ( env.ProjectName.isEmpty() ) {
                        echo "ProjectName not specified."
                        autoCancelled = true
                        error('Aborting the build.')
                    }
                    else {
                        for (iname in ProjectName.tokenize(',')) {
                            sh """
                                curl -X PUT \
                                -H "content-type: application/json" \
                                -H "Cookie: KuboardUsername=admin; KuboardAccessKey=5xnrsjnkcjam.sefdasdfwefedsaeedsadwsadwdfghs" \
                        -d '{"kind":"deployments","namespace":"biking","name":"${iname}","images":{"harbor.yunson.com/bk/${iname}":"registry-intl.cn-harbor.yunson.com/bk/${iname}:${ENVMENT}"}}' \
                        "http://X.X.X.X:8987/kuboard-api/cluster/BikingProd/kind/CICDApi/admin/resource/updateImageTag"
                                curl -X PUT \
                                -H "Content-Type: application/yaml" \
                                -H "Cookie: KuboardUsername=admin; KuboardAccessKey=5xnrsjnkcjam.sefdasdfwefedsaeedsadwsadwdfghs" \
                                -d '{"kind":"deployments","namespace":"biking","name":"${iname}"}' \
                                "http://X.X.X.X:8987/kuboard-api/cluster/BikingProd/kind/CICDApi/admin/resource/restartWorkload"
							"""
                        }
                   }
                }
            }
        }           
    }
}
. 参数采用的是多选多的自选模式

代码段

        extendedChoice(name: 'ProjectName', 
                       type: 'PT_CHECKBOX', 
                       description: '请勾选所要发布的项目模块', 
                       quoteValue: false, 
                       saveJSONParameterToFile: false, 
                       value: 'neex-spot-adminserver,neex-spot-eventlogger,neex-spot-eventprocessor,neex-spot-bardatabuilder,neex-spot-resultlogger,neex-spot-resultprocessor,neex-spot-marketdataserver,neex-spot-dispatch,neex-spot-dispatch-orderbook,neex-spot-userdataserver', 
                       visibleItemCount: 10, 
                       multiSelectDelimiter: ',',
                       defaultValue: 'neex-spot-adminserver,neex-spot-eventlogger,neex-spot-eventprocessor,neex-spot-bardatabuilder,neex-spot-resultlogger,neex-spot-resultprocessor,neex-spot-marketdataserver,neex-spot-dispatch,neex-spot-dispatch-orderbook,neex-spot-userdataserver'
		)      

在这里插入图片描述

. 通过调用kuboard实现ci cd自动部署

代码段

        stage('deploy Server'){
            steps{
                script{
                    if ( env.ProjectName.isEmpty() ) {
                        echo "ProjectName not specified."
                        autoCancelled = true
                        error('Aborting the build.')
                    }
                    else {
                        for (iname in ProjectName.tokenize(',')) {
                            sh """
                                curl -X PUT \
                                -H "content-type: application/json" \
                                -H "Cookie: KuboardUsername=admin; KuboardAccessKey=5xnrsjnkcjam.sefdasdfwefedsaeedsadwsadwdfghs" \
                                -d '{"kind":"deployments","namespace":"biking","name":"${iname}","images":{"harbor.yunson.com/bk/${iname}":"registry-intl.cn-harbor.yunson.com/bk/${iname}:${ENVMENT}"}}' \
                                "http://X.X.X.X:8987/kuboard-api/cluster/BikingProd/kind/CICDApi/admin/resource/updateImageTag"
                        
                                curl -X PUT \
                                -H "Content-Type: application/yaml" \
                                -H "Cookie: KuboardUsername=admin; KuboardAccessKey=5xnrsjnkcjam.sefdasdfwefedsaeedsadwsadwdfghs" \
                                -d '{"kind":"deployments","namespace":"biking","name":"${iname}"}' \
                                "http://X.X.X.X:8987/kuboard-api/cluster/BikingProd/kind/CICDApi/admin/resource/restartWorkload"
							"""
                        }
                   }
                }
            }

在kuboard控制台可以看到我们的ci cd配置对应的key等
在这里插入图片描述
在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐