jenkins - 将 contains 与 Jenkins 表达式和 env var 一起使用
问题描述
我正在尝试创建一个Jenkinsfile
来处理产品与开发环境中的不同步骤。我试图将anyOf
模式与expression
检查JOB_URL
环境变量以确定要遵循的构建服务器/构建指令一起使用。
Jenkinsfile 最终看起来像下面这样:
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 -> 运行
In Dev
步骤中 - 在 Prod -> 运行
In Prod
步骤
实际行为:
- 在 Dev -> 运行
In Prod
ANDIn Dev
步骤 - 在 Prod -> 运行
In Prod
步骤
JOB_URL
是的,我已检查以确保dev
不包含prod_server.com
.
我也尝试作为具有相同结果!env.JOB_URL.contains('dev_server.com')
的步骤的附加表达式。prod
我只知道groovy
通过 Jenkins,并且对 Jenkins 管道语法有点陌生,所以也许我误解了这里的行为,但根据我从 Jenkinsexpression
文档中了解到的情况:
从表达式返回字符串时,必须将它们转换为布尔值或返回 null 以评估为 false。简单地返回“0”或“false”仍将评估为“true”。
作为健全性检查,我确认groovy
文档说contains
应该返回一个boolean
.
解决方案
您可以在表达式中使用正则表达式比较器来检查以下环境变量之一:
- 内置:
JENKINS_URL
和BUILD_URL
(源内置 var) - 插件提供
JOB_URL
(存在但找不到源)
注意:环境变量通过保留的环境变量映射env
(使用 env 变量)公开,例如server_url = env.JENKINS_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.JENKINS_URL = ${env.JENKINS_URL}"
}
}
stage('In Prod') {
when {
allOf {
expression { params.P1 == 'x' }
expression { params.P2 == 'y' }
expression { env.JENKINS_URL ==~ /.*prod_server.com.*/ }
}
}
steps {
echo "Prod"
}
}
stage('In Dev') {
when {
allOf {
expression { params.P1 == 'x' }
expression { params.P2 == 'y' }
expression { env.JENKINS_URL ==~ /.*dev_server.com.*/ }
}
}
steps {
echo "DEV"
}
}
}
}
推荐阅读
- javascript - 如何计算当前日期与创建日期的剩余时间?
- php - 在PHP中将空字符串分解为数组
- c# - 过滤 ReportViewer 数据?
- visual-studio-code - 无法从扩展中使用 VSCode CLI
- c++ - 如何创建对象数组并访问子类中的函数?C++
- c# - 关闭应用程序后如何使背景颜色保持不变?
- wordpress - EC2 上的 WordPress 崩溃并无法访问
- reactjs - 无法在开玩笑的测试用例中读取属性 clientHeight 文档
- php - 从数组值填充 HTML 表
- google-sheets - Importhtml 重命名标题名称 Google 表格