将contains与Jenkins表达式和env var一起使用
我正在尝试创建一个将contains与Jenkins表达式和env var一起使用,jenkins,groovy,Jenkins,Groovy,我正在尝试创建一个Jenkinsfile,以处理prod与dev环境中的不同步骤。我试图使用检查JOB\u URL环境变量的来确定要遵循哪个构建服务器/构建指令 Jenkins文件的最终外观如下所示: stage('In Prod') { when { allOf { expression { params.P1 == 'x' } expression { params.P2 == 'y' } exp
Jenkinsfile
,以处理prod与dev环境中的不同步骤。我试图使用检查JOB\u URL
环境变量的来确定要遵循哪个构建服务器/构建指令
Jenkins文件的最终外观如下所示:
stage('In Prod') {
when {
allOf {
expression { params.P1 == 'x' }
expression { params.P2 == 'y' }
expression { env.JOB_URL.contains('prod_server.com') }
}
}
...
}
stage('In Dev') {
when {
allOf {
expression { params.P1 == 'x' }
expression { params.P2 == 'y' }
expression { env.JOB_URL.contains('dev_server.com') }
}
}
...
}
预期行为:
- 在Dev->run
步骤中的Dev
- 在Prod->run
步骤中的Prod
- 在Dev->Prod中运行
,在Dev中运行
- 在Prod->run
步骤中的Prod
dev
上的JOB\u URL
不包含prod\u server.com
我也试过!env.JOB_URL.contains('dev_server.com')
作为prod
步骤的附加表达式,结果相同
我只知道足够的groovy
来了解Jenkins,而且我对Jenkins管道语法有点陌生,所以我可能误解了这里的行为,但从Jenkins表达式
文档中我了解到:
从表达式返回字符串时,它们必须是
转换为布尔值或返回null以计算为false。简单地
返回“0”或“false”仍将计算为“true”
作为一个健全性检查,我确认了
groovy
文档中说。您可以在表达式中使用正则表达式比较器来检查作业URL。试着这样做:
pipeline {
agent none
parameters {
string(name: 'P1', defaultValue: 'x', description: '')
string(name: 'P2', defaultValue: 'y', description: '')
}
stages {
stage('Init') {
steps {
echo "params = ${params.toString()}"
echo "env.JOB_URL = ${env.JOB_URL}"
}
}
stage('In Prod') {
when {
allOf {
expression { params.P1 == 'x' }
expression { params.P2 == 'y' }
expression { JOB_URL ==~ /.*prod_server.com.*/ }
}
}
steps {
echo "Prod"
}
}
stage('In Dev') {
when {
allOf {
expression { params.P1 == 'x' }
expression { params.P2 == 'y' }
expression { JOB_URL ==~ /.*dev_server.com.*/ }
}
}
steps {
echo "DEV"
}
}
}
}
我们确定这有效吗?我有一个类似的例子,但我总是得到“没有这样的属性:类的JOB\uurl:WorkflowScript”