使用多分支管道时减少Jenkins文件中的阶段

使用多分支管道时减少Jenkins文件中的阶段,jenkins,continuous-integration,jenkins-pipeline,jenkins-plugins,jenkins-job-dsl,Jenkins,Continuous Integration,Jenkins Pipeline,Jenkins Plugins,Jenkins Job Dsl,在这个文件中,我试图为多分支管道中的不同分支执行相同的阶段。我每次都需要配置每个分支名称的环境变量。有没有更好的办法 stage('Create New AMI for master branch') { when { branch 'master' } environment { BRANCH_NAME = "${env.BRANCH_NAME}"

在这个文件中,我试图为多分支管道中的不同分支执行相同的阶段。我每次都需要配置每个分支名称的环境变量。有没有更好的办法

        stage('Create New AMI for master branch') {
            when { branch 'master' }
            environment {
                BRANCH_NAME = "${env.BRANCH_NAME}"
                ENV_NAME = "prod"
            }
            steps {
                sh "packer build jenkins/${PROJECT_NAME}/${PROJECT_NAME}-ami.json"
            }
        }
        stage('Create New AMI for development branch') {
            when { branch 'development' }
            environment {
                BRANCH_NAME = "${env.BRANCH_NAME}"
                ENV_NAME = "dev"
            }
            steps {
                sh "packer build jenkins/${PROJECT_NAME}/${PROJECT_NAME}-ami.json"
            }
        }
        stage('Create New AMI for staging branch') {
            when { branch 'staging' }
            environment {
                BRANCH_NAME = "${env.BRANCH_NAME}"
                ENV_NAME = "staging"
            }
            steps {
                sh "packer build jenkins/${PROJECT_NAME}/${PROJECT_NAME}-ami.json"
            }
        }

在这种情况下,请使用共享库,它将包含所有阶段实现。参考示例实现,如下所示。
创建一个名为:sharedlibraries(groovy文件)

在您的文件中,编写以下代码:

// Global variable is used to get data from groovy file(shared library)
def stagelibrary
stage('Create New AMI') {   
            steps {
              script {
                        // Load Shared library Groovy file stagelibraries.Give your path of stagelibraries file whic is created
                        stagelibrary = load 'C:\\Jenkins\\stagelibraries'
                        // Execute Create_AMI function. You can add if else conditions over here, based on your branches. But am not sure of your conditions.
                        // You can also pass your environment variable 
                        // in the Crete_AMI function using env.<YOURENVVARIABLE>
                        stagelibrary.Create_AMI(PROJECT_NAME,env.ENV_NAME)       
                      }               
                  }
        }

//全局变量用于从groovy文件(共享库)获取数据
舞台图书馆
阶段('创建新AMI'){
台阶{
剧本{
//加载共享库Groovy文件stagelibraries。给出创建stagelibraries文件的路径
stagelibrary=加载'C:\\Jenkins\\stagelibraries'
//执行Create_AMI函数。您可以根据您的分支在此处添加if-else条件。但我不确定您的条件。
//还可以传递环境变量
//在Crete_AMI函数中使用env。
stagelibrary.Create\u AMI(项目名称,环境名称)
}               
}
}

上面的示例提供了共享库的概述,您不需要编写相同的函数/或冗余阶段。

@Hiren这对您有用吗?嘿@Altaf感谢您提供了新的视角,但我也需要环境名称,因此我如何使用它?这是否会将所有全局环境变量传递给打包步骤?@Hiren,是的,即使在打包步骤中,您也可以以相同的方式使用环境变量。示例:jobName=env.JOB_NAME@Hiren我提供的解决方案是否适用于youHi@altaf我还不清楚如何在您的示例中使用共享库使用ENV_NAME=“dev”/“Stage”/“prod”。
// Global variable is used to get data from groovy file(shared library)
def stagelibrary
stage('Create New AMI') {   
            steps {
              script {
                        // Load Shared library Groovy file stagelibraries.Give your path of stagelibraries file whic is created
                        stagelibrary = load 'C:\\Jenkins\\stagelibraries'
                        // Execute Create_AMI function. You can add if else conditions over here, based on your branches. But am not sure of your conditions.
                        // You can also pass your environment variable 
                        // in the Crete_AMI function using env.<YOURENVVARIABLE>
                        stagelibrary.Create_AMI(PROJECT_NAME,env.ENV_NAME)       
                      }               
                  }
        }