如何编写 Jenkins Pipeline 脚本来获取所需的存储库?

问题描述 投票:0回答:1

我需要编写一个管道脚本,以便它获取我需要的存储库,并且其他阶段在该存储库的上下文中工作。 我还需要所有变量可用,例如上次提交的哈希值或项目名称。

事实上,当我们在作业设置中选择“来自 SCM 的管道脚本”选项时,我需要做同样的事情。
但就我而言,我无法设置“来自 SCM 的管道脚本”,因为我需要编写一个与我需要的存储库 Jenkinsfile 中的管道不同的自定义管道,并且我不想创建另一个 Jenkinsfile。

我不明白如何以这种方式获得 env.GIT_COMMIT ? 下面是我的管道,如果我选择“来自 SCM 的管道脚本”并设置所需的存储库,该管道即可工作。如何

@Library("cnv-jenkins-sharedlib") _

pipeline {
    agent {
        label 'cnv-jobs'
    }
    options { 
            timestamps ()
            disableConcurrentBuilds() 
            }
            tools {
                maven 'Maven_3.9.2'
                jdk 'JDK11'
            }
            parameters {
                choice(name: 'StageName', choices: ['test', 'dev' ], description: 'Choise stage')
                booleanParam(name: 'deploy', defaultValue: false, description: 'Deploy')
            }  
            environment {
                registryUrl = 'cprd-doc-reg01.example.com:10012'
                DOCKER_CREDS = credentials('cnv_docker_reg_creds')
                ENV = "${params.StageName}"
                DEPLOY_BRANCH = "test"
                PROJECT_NAME = "background-osago-tarifficaiton-service"
                GIT_HASH = env.GIT_COMMIT.take(7)
            }


    stages {
        
        stage('prepare Environment'){
            steps {
                GetBuildVersion()
            }
        }


        stage('Build and Sonar Scanner') {
            steps {
                
                MvnBuild(registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}", PROFILE: "${ENV}stand")
            }
        }

        
        stage('Build image'){
            steps {
                cnvDockerBuild(dockerFile: "src/main/docker/Dockerfile.jvm", registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}")
            }
        }
    

        stage("Deploy to  K8S") {
            when { expression {  params.deploy  } } 
            steps {
                CnvDeployK8S(imageTag: "build-${GIT_HASH}")
            }
        }
    }
}
jenkins
1个回答
0
投票

我找到了答案。下面你可以看到我需要什么:

@Library("cnv-jenkins-sharedlib") _

pipeline {
    agent {
        label 'cnv-jobs'
    }
            options { 
                timestamps ()
                disableConcurrentBuilds() 
            }
            tools {
                maven 'Maven_3.9.2'
                jdk 'JDK11'
            }
            parameters {
                choice(name: 'StageName', choices: ['test', 'dev' ], description: 'Choice stage')
                booleanParam(name: 'deploy', defaultValue: false, description: 'Deploy to k8s')
            }  
            environment {
                registryUrl = 'cprd-doc-reg01.example.com:10012'
                DOCKER_CREDS = credentials('cnv_docker_reg_creds')
                ENV = "${params.StageName}"
                DEPLOY_BRANCH = "feature/CNVPRD-2475/osago_16_model"
                PROJECT_NAME = "background-osago-tarifficaiton-service"
            }


    stages {
            stage('Checkout SCM') {
                steps {
                    script {
                        checkout([$class: 'GitSCM', 
                        branches: [[name: "${env.DEPLOY_BRANCH}" ]], 
                        doGenerateSubmoduleConfigurations: false,                         
                        extensions: [[$class: 'CleanCheckout']], 
                        submoduleCfg: [], 
                        userRemoteConfigs: [[credentialsId: 'bitbucket_cnv_ssh', url: "ssh://[email protected]:7999/conv/tariffication-service.git"]]])
                        def scmVars = checkout([$class: 'GitSCM', branches: [[name: "${DEPLOY_BRANCH}"]], 
                                            userRemoteConfigs: [[url: 'https://github.com/jenkinsci/git-plugin.git']]])
                        GIT_HASH = scmVars.GIT_COMMIT.take(7)
                        GIT_BRANCH = scmVars.GIT_BRANCH
                        script{
                                sh "ls -lat"
                        }   
                    }   
                }       
            }
                
            

            stage('prepare Environment'){
                steps {
                    sh "echo Git Branch is: ${GIT_BRANCH}"
                    GetBuildVersion()
                }
            }


            stage('Build and Sonar Scanner') {
                steps {
                    sh "ls -la"
                    MvnBuild(registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}", PROFILE: "${ENV}stand")
                }
            }

            
            stage('Build image'){
                steps {
                    cnvDockerBuild(dockerFile: "src/main/docker/Dockerfile.jvm", registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}")
                }
            }
        

            stage("Deploy to  K8S") {
                when { expression {  params.deploy  } } 
                steps {
                    CnvDeployK8S(imageTag: "build-${GIT_HASH}")
                }
            }
        }



    post {
        always {
            script {
                notifyBitbucket(
                    credentialsId: 'cnv_bitbucket',
                    ignoreUnverifiedSSLPeer: 'true',
                    stashServerBaseUrl: 'https://bitbucket02.sberins.ru'
                )
            }
            junit 'target/surefire-reports/*.xml' 
        }
        failure {
            script {
                if (params.release) {
                    sshagent(['bitbucket_cnv_ssh']) {
                        sh "git checkout ${env.BRANCH_NAME}"
                        sh "git tag -d ${env.VERSION}"
                        sh "git push --delete origin ${env.VERSION}"
                    }

                }
            }
                emailext mimeType: 'text/html', 
                body: "Результат выполнения сборки №${env.BUILD_NUMBER} ${env.BUILD_URL}console", 
                recipientProviders: [culprits(), developers(), requestor()], 
                replyTo: '[email protected]', 
                subject: "Error: ${env.JOB_NAME}"
        }
        success {
            script {
                emailext mimeType: 'text/html', body: "Результат выполнения сборки №${env.BUILD_NUMBER} ${env.BUILD_URL}console", 
                recipientProviders: [culprits(), developers(), requestor()], 
                replyTo: '[email protected]', 
                subject: "Success: ${env.JOB_NAME}"
            }
                  
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.