在 jenkins 声明式管道中,如何根据自定义 groovy/powershell 方法设置环境变量的值?例如,如果我有如下所示的说明性管道,我可以使用共享库方法来设置该值吗? 本质上,我试图使用具有部署阶段的多分支声明式管道 jenkins 作业,但我需要确保开发分支部署到 DEV,发布分支部署到 STG,但使用相同的管道。我的想法是创建一个基于自定义方法(可能在共享库中的 Groovy 中)设置的环境变量,该方法将简单地查看 env.BRANCH 的当前值,并简单地有一些逻辑来设置 的值目标部署环境。这是我设想的一个例子
pipeline {
environment {
DEPLOY_ENV = mapBranchToDeployEnvironment(${BRANCH})
}
然后在我的部署阶段,我将在两次 powershell 调用中使用该值
bat "powershell .\\Deploy-Service -Environment ${DEPLOY_ENV}"
bat "powershell .\\Deploy-ServiceProxy -Environment ${DEPLOY_ENV}"
否则,人们当前如何解决使用相同管道部署到不同环境,同时在许多其他函数调用中使用变量的问题? Jenkins 建议将触发构建的分支名称映射到应部署到的环境(如果有)的方法是什么? 根据我的理解,声明式管道允许管道是“多分支”的,如果作业也部署,则需要映射到部署环境。当所有全局 jenkins 管道环境变量对于每个作业/分支执行都具有相同的值时,管道如何使用多分支部署到多个环境?
在上述场景中,管道变量“DEPLOY_ENV”派生自作业设置的其他环境变量,并且通常在阶段级别可用,但在这里我们希望全局设置该值,以便我们可以使用跨阶段
更新:我的问题是我没有意识到它有多么简单,而是认为我必须将阶段或脚本对象传递到常规共享库函数中,而实际上它就像创建共享库一样简单,然后直接在方法中引用环境变量。简单的。谢谢。
最佳答案
我遇到了完全相同的问题,确实可以使用共享库方法。但是还有另一种解决方案,如果您还没有设置共享库,则更简单,它包括在 Pipeline 语句之前定义一个 groovy 方法,然后在管道中使用它,如下所示:
def getEnvFromBranch(branch) {
if (branch == 'master') {
return 'production'
} else {
return 'staging'
}
}
pipeline {
agent any
environment {
targetedEnv = getEnvFromBranch(env.BRANCH_NAME)
}
stages {
stage('Build') {
steps {
echo "Building in ${env.targetedEnv}"
}
}
}
}
关于jenkins - 在 Jenkins 声明式管道中,如何根据方法设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45258294/