【发布时间】:2020-09-04 19:47:17
【问题描述】:
在 jenkins 声明式管道中,如何根据自定义 groovy/powershell 方法设置环境变量的值?例如,如果我有一个如下的 delcarative 管道,我可以使用共享库方法来设置这个值吗? 本质上,我正在尝试使用具有部署阶段的多分支声明性管道 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”派生自作业设置的其他环境变量,通常在阶段级别可用,但在这里我们希望全局设置值以便我们可以使用跨阶段
更新:我的问题是我没有意识到它有多么简单,而是认为我必须将一个阶段或脚本对象传递给一个 groovy 共享库函数,而实际上它就像创建一个共享库一样简单,然后直接引用方法中的环境变量。简单的。谢谢你。
【问题讨论】:
-
你最终解决了这个问题吗?如何根据任意条件更改
environment块中的变量值?
标签: jenkins groovy continuous-integration jenkins-pipeline continuous-deployment