Pau*_*chs 9 jenkins jenkins-pipeline
我正在尝试获得一个如下所示的声明性管道:
pipeline {
environment {
ENV1 = 'default'
ENV2 = 'default also'
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我希望能够根据任意条件覆盖ENV1或ENV2的值.我目前的需求只是基于它的分支,但我可以想象更复杂的条件.
有没有理智的方法来实现这个?我在网上看到了一些例子:
stages {
stage('Set environment') {
steps {
script {
ENV1 = 'new1'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我相信这不是设置实际的环境变量,而是设置一个局部变量,它覆盖了以后对ENV1的调用.问题是,我需要这些环境变量由nodejs脚本读取,而那些需要是真正的机器环境变量.
有没有办法在jenkinsfile中将环境变量设置为动态?
小智 20
也许您可以尝试这样的事情:
pipeline {
agent any
environment {
ENV_NAME = "${env.BRANCH_NAME == "develop" ? "staging" : "production"}"
}
}
Run Code Online (Sandbox Code Playgroud)
str*_*icq 11
以下是在环境部分有条件地设置变量的正确语法。
environment {
MASTER_DEPLOY_ENV = "TEST" // Likely set as a pipeline parameter
RELEASE_DEPLOY_ENV = "PROD" // Likely set as a pipeline parameter
DEPLOY_ENV = "${env.BRANCH_NAME == 'master' ? env.MASTER_DEPLOY_ENV : env.RELEASE_DEPLOY_ENV}"
CONFIG_ENV = "${env.BRANCH_NAME == 'master' ? 'MASTER' : 'RELEASE'}"
}
Run Code Online (Sandbox Code Playgroud)
用于withEnv动态设置环境变量以用于管道的某个部分(例如,在运行节点脚本时).像这样(用你的节点脚本替换sh步骤的内容):
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
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15688 次 |
| 最近记录: |