在Jenkins表达式和env var中使用contains

时间:2018-09-20 14:20:25

标签: jenkins groovy

我试图创建一个Jenkinsfile来处理产品与开发环境中的不同步骤。我试图使用anyOf pattern with an 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') }
        }
    }
    ...
}

预期行为:

  • 在开发人员中->运行In Dev步骤
  • 在Prod中->运行In Prod步骤

实际行为:

  • 在开发人员中->运行In ProdIn Dev步骤
  • 在Prod中->运行In Prod步骤

是的,我已经检查以确保JOB_URL上的dev不包含prod_server.com

我还尝试使用!env.JOB_URL.contains('dev_server.com')作为prod步骤的附加表达式,结果相同。

我只了解groovy才能通过Jenkins,并且对Jenkins管道语法有些陌生,所以也许我对这里的行为有误解,但据我对Jenkins expression文档的了解:

  

从表达式返回字符串时,它们必须是   转换为布尔值或返回null以求值为false。只是   返回“ 0”或“ false”仍将评估为“ true”。

作为健全性检查,我确认groovy文档中说contains should be returning a boolean

1 个答案:

答案 0 :(得分:0)

您可以在表达式中使用正则表达式比较器来检查JOB_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"
            }
        }
    }
}