Jenkinsfile 5.62 KB
pipeline {
    agent any
    parameters{
            choice(
                description: '你需要选择哪个环境部署?',
                name: 'deploy_env',
                choices: ['heart-pre-release','heart-test']
            )
        }
    //环境定义
    environment{
        //日志映射路径
        LOG_PATH = "/mnt/log/"
        //服务名称
        SVN_FOLD = readMavenPom().getArtifactId()
        SSH_PATH = "csbr5.3"
        //镜像版本号
        image_tag = readMavenPom().getVersion()
        //docker私服ip
        ip = "192.168.5.4:82"
        //微服务端口号
        port = "9199"
    }
    //定时任务
    //triggers { pollSCM('H 4/* 0 0 1-5') }
    //triggers {
        //每天凌晨2点自动构建
    //    cron('H 2 * * *')
    //}
     options {
            // 设置保留的最大历史构建数为6
        buildDiscarder(logRotator(numToKeepStr: '2'))
     }
    //全局定义工具
    tools {
        //工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预配置。
        maven 'maven3'
        jdk 'JDK17'
    }
    stages {
            stage('heart-pre-release'){
                                when{
                                    expression{return params.deploy_env=='heart-pre-release'}
                                }
                                steps{
                               script{
                                env.SVN_TYPE = "pre-release"
                                }
                                }
            }
            stage('heart-test'){
                                when{
                                    expression{return params.deploy_env=='heart-test'}
                                }
                                steps{
                               script{
                                env.SVN_TYPE = "test"
                                }
                                }
            }

        //构建
        stage('Maven Build') {
            steps {
                //sh './gradlew build'
                 //执行shell命令
                 sh 'echo ${JAVA_HOMOE}'
                 sh "mvn -f ./pom.xml clean package -Dmaven.test.skip=true -X -P${params.deploy_env}"
                 //sh 'mvn -f ${SVN_FOLD}/pom.xml clean package'
            }
        }
        stage('Docker Build') {
                    steps {
                       //分分支构建
                       script{
                                //develop分支环境
                                echo 'start to deploy ${SVN_FOLD} on test ...'
                                sh '''
                                    CID=$(docker ps -a | grep "${SVN_FOLD}" | awk '{print $1}')
                                    IID=$(docker images | grep "none" | awk '{print $3}')
                                    cp "$WORKSPACE"/target/"${SVN_FOLD}".jar "$WORKSPACE"
                                    if [ -n "$IID" ]; then
                                       echo "存在'${SVN_FOLD}'镜像,IID='$IID'"
                                       cd "$WORKSPACE"
                                       ##构建镜像到远程仓库
                                       docker login "${ip}" -u admin -p E6w611g864wQ2
                                       docker build -t "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}" .
                                       docker push "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}"
                                    else
                                       echo "不存在'${SVN_FOLD}'镜像,开始构建镜像"
                                       ##构建镜像到远程仓库
                                       docker login "${ip}" -u admin -p E6w611g864wQ2
                                       docker build -t "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}" .
                                       docker push "${ip}"/csbr/"${SVN_FOLD}""-${SVN_TYPE}":"${image_tag}"
                                    fi
                                    '''
                                echo 'Depoly ${SVN_FOLD} develop success ...'

                       }
                    }
                }
        //部署
        stage('Deploy') {
            steps {
                echo 'Deploying'
                //分分支部署
                script{
                        //develop分支环境
                        echo 'start to deploy ${SVN_FOLD} on test ...'
                        //调用Publish Over SSH插件,上传docker-compose.yaml文件并且执行deploy脚本
                        sshPublisher(publishers: [sshPublisherDesc(configName: "$SSH_PATH", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """
                            echo "日志路径 '$LOG_PATH''$SVN_FOLD'"
                            #使用k8s构建
                            kubectl delete -f /mnt/k8s/${params.deploy_env}/ms-data-circulation-portal-service.yaml
                            kubectl apply -f /mnt/k8s/${params.deploy_env}/ms-data-circulation-portal-service.yaml
                        """, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/mnt/csbr/data', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'output/*.*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                        echo 'Depoly ${SVN_FOLD} success ...'

                }
                //sh './build.sh'
            }
        }
    }
    //归档
    post {
        always {
            echo 'Archive artifacts'
            archiveArtifacts artifacts: "**/target/*.jar", excludes: "**/target"
        }
    }
}