2022年8月15日 作者 zeroheart

jenkins使用pipeline的模式 发布项目

下面文件内容已经脱敏,主要能达成以下的一些功能

1.选择不同的分支构建

2.微服务选择不同的模块构建

3.发布到服务器,并执行服务器的重启脚本

pipeline {
    agent any

    tools {
      jdk 'jdk1.8'
      maven 'maven3.6.3'
    }

    environment {
        git_addr = "gitaddr"
        target_dir = "xxx"
        target_ssh = "xxx"
        target_port = "22"
        get_branch = "$branch"
    }

    parameters {
        gitParameter(
          branch: '',
          branchFilter: ".*",
          defaultValue: "dev_cloud",
          description: '',
          listSize: '10',
          name: 'Version',
          quickFilterEnabled: false,
          selectedValue: 'NONE',
          sortMode: 'ASCENDING_SMART',
          tagFilter: "*",
          type: 'PT_BRANCH_TAG',
          useRepository: 'xxx')
   }
   
    stages {
        stage ("echo Git Tag") {
            steps {
              echo "${params.Version}"
            }
         }
         
        stage('git checkout') {
            steps {
                git branch: "${params.Version}".split('/')[1],
                credentialsId: 'xxxx',
                url: 'xxx'
            }
        }

        stage('build') {
            steps {
                echo "start package"
                sh "java -version && mvn -v"
                sh "mvn clean package -Dmaven.test.skip=true"
            }
        }

        stage('release') {
            steps {
                echo "start release ssh"
                script {
                    def apps = "${module_name}".split(",")
                    for (int i = 0; i < apps.size(); ++i) {
                        def jar_name = "kech-${apps[i]}.jar"
                        def prefix = "web/${apps[i]}"
                        if("${apps[i]}" == 'gateway') prefix = "${apps[i]}"
                        def remoteDirectory = "/home/service/xxx/server"
                        def removePrefix = "${prefix}/target/"
                        def sourceFiles = "${prefix}/target/${jar_name}"
                        def execCommand = "echo '0'"
                        // def execCommand = """docker stop clinicaltrials-auth&&docker rm edc-clinicaltrials-auth&&docker-compose up -d --build clinicaltrials-auth&&echo "0""""
                        echo execCommand
                        echo "===begin-->${apps[i]}->>>-jar_name:${jar_name}====="
                        sshPublisher(
                            publishers: [
                        sshPublisherDesc(configName: 'xxx', transfers: [sshTransfer(cleanRemote: false, excludes: '',
                        execCommand: execCommand,
                        execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: remoteDirectory, remoteDirectorySDF: false, removePrefix: removePrefix, sourceFiles: sourceFiles)], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                        echo "0"
                    }
                }
            }
        }

        stage('run') {
            steps {
                echo "start release ssh"
                script {
                    def apps = "${module_name}".split(",")
                    for (int i = 0; i < apps.size(); ++i) {
                        def sh_name = apps[i];
                        //.replaceAll("-", "_")
                        echo "${sh_name}"
                        def remote = [:]
                        remote.name = 'xxx' // jenkins 管理里面添加的ssh配置
                        remote.host = 'xxx'
                        remote.user = 'xxx'
                        remote.password = 'xxx'
                        remote.allowAnyHosts = true
                        stage('Remote SSH') {
                            //sshCommand remote: remote, command: "cd /home/service/xxx/server && sh startup.sh ${sh_name} restart"
                            sshCommand remote: remote, command: "echo run success"
                        }
                    }
                }
            }
        }

    }

    post {
        always {
            echo '构建结束...'
        }
        success {
            echo '恭喜您,构建成功!!!'
        }
        failure {
            echo '抱歉,构建失败!!!'
        }
        unstable {
            echo '该任务已经被标记为不稳定任务....'
        }
        changed {
            echo ''
        }
    }
}


2.模块设置
module_name
通过增加checkbox的参数来处理