代码之家  ›  专栏  ›  技术社区  ›  getglad

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

  •  0
  • getglad  · 技术社区  · 6 年前

    我想创造一个 Jenkinsfile 在prod和dev环境中处理不同的步骤。我试图使用 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') }
            }
        }
        ...
    }
    

    预期行为:

    • 在Dev->运行中 In Dev
    • 在产品中->运行 In Prod

    实际行为:

    • 在Dev->运行中 生产中 以及 开发中
    • 在产品中->运行 生产中

    是的,我已经检查过了 作业URL dev 不包含 prod_server.com .

    我也试过 !env.JOB_URL.contains('dev_server.com') 作为 prod 结果相同的步骤。

    我只知道够了 groovy 通过Jenkins,对Jenkins管道语法有点陌生,所以也许我误解了这里的行为,但是根据Jenkins的理解 表达 文档:

    当从表达式返回字符串时,它们必须是 已转换为布尔值或返回null以计算为false。简单地 返回“0”或“false”仍将计算为“true”。

    作为精神检查,我确认 凹槽 文件上说 contains should be returning a boolean .

    1 回复  |  直到 6 年前
        1
  •  0
  •   macg33zr    6 年前

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