Как проверить, что коляска Дженкинса содержит символ - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь проверить, содержит ли мой параметр Jenkins имя хоста. Но когда я использую Регулярные выражения, чтобы увидеть, содержит ли оно имя, оно не проверяется.

Я предполагаю, что у меня возникла ошибка в способе проверки или в том виде, в котором она заключена в скобки.

Ниже приведен пример того, с чем я работаю

        stage('Release  1') {
            when {
                expression { params.SECRET_NAME != "" && params.STAGING_ENV != ("*some.host.name*") }
            }
            steps {
                    echo "Release 1"
                }
        }

        stage('Release 2') {
            when {
                expression {params.STAGING_ENV == ("*some.host.name*")  && params.SECRET_NAME == ("*+*") }
            }
            steps {
                    echo "Release 2"
                }
        }

    }

Я хочу, чтобы он пропустил сцену в моем конвейере Jenkins, если он не удовлетворяет условиям

1 Ответ

1 голос
/ 03 октября 2019

Хорошо, вам нужно несколько изменений здесь, изнутри:

  1. Замените * на .*. Проще говоря, в регулярном выражении * обозначает один и тот же (набор) символов любое количество раз (abc* соответствует abccccc), тогда как .* обозначает любой символ любое количество раз (abc.* соответствует abccccc,abcdefg, abcadkhsdalksd и т. Д.).
  2. Удалите двойные кавычки ", окружающие шаблоны регулярных выражений;чтобы вы не хотели, чтобы они интерпретировались как строковые литералы.
  3. Оберните шаблоны регулярных выражений в разделители, обычно /, чтобы определить границу строки.
  4. Скобки () сами по себе здесь необязательны.
  5. Чтобы сопоставить регулярные выражения, замените оператор равенства == на оператор совпадения ==~ (строгий), который возвращает логическое значение.
  6. В Groovy нет оператора "НЕ совпадать",Чтобы инвертировать совпадение, вам нужно инвертировать результат всего выражения.
  7. Если + в *+* должно быть литералом, тогда вы должны экранировать его как *\+*.

Соединяя их вместе, ваш конвейер должен выглядеть следующим образом:

stage('Release  1') {
    when {
        expression {
            params.SECRET_NAME != "" && !(params.STAGING_ENV ==~ /.*some.host.name.*/)
        }
    }
    steps {
        echo "Release 1"
    }
}
stage('Release 2') {
    when {
        expression {
            params.STAGING_ENV ==~ /.*some.host.name.*/  && params.SECRET_NAME ==~ /.*\+.*/
        }
    }
    steps {
        echo "Release 2"
    }
}

Дополнительная информация:

  1. http://docs.groovy -lang.org / latest / html / Documentation / core-operator.html
  2. http://web.mit.edu/hackl/www/lab/turkshop/slides/regex-cheatsheet.pdf
...