我正在尝试获得一个如下所示的声明性管道:
pipeline { environment { ENV1 = 'default' ENV2 = 'default also' } }
问题是,我希望能够基于任意条件覆盖ENV1或ENV2的值。我目前的需求只是将其作为分支机构的基础,但我可以想象更复杂的情况。
有没有理智的方法来实现这一目标?我在网上看到了一些类似的示例:
stages { stage('Set environment') { steps { script { ENV1 = 'new1' } } } }
但是我相信这并没有设置实际的环境变量,而是设置了一个局部变量,该局部变量将覆盖以后对ENV1的调用。问题是,我需要由nodejs脚本读取这些环境变量,而这些则需要是真实的机器环境变量。
有什么方法可以在jenkinsfile中将环境变量设置为动态的?
用于withEnv动态设置环境变量以用于管道的特定部分(例如,在运行节点脚本时)。像这样(用您的节点脚本替换sh步骤的内容):
withEnv
pipeline { agent { label 'docker' } environment { ENV1 = 'default' } stages { stage('Set environment') { steps { sh "echo $ENV1" // prints default // override with hardcoded value withEnv(['ENV1=newvalue']) { sh "echo $ENV1" // prints newvalue } // override with variable script { def newEnv1 = 'new1' withEnv(['ENV1=' + newEnv1]) { sh "echo $ENV1" // prints new1 } } } } } }