#regex #jenkins #groovy #jenkins-pipeline
#регулярное выражение #дженкинс #groovy #дженкинс-конвейер
Вопрос:
Предположим, я хочу определить конвейер для разных ветвей в рамках одного конвейера со сценарием, как определить регулярное выражение для определенного шаблона ветвей. Скажем, например :-
if(env.BRANCH_NAME ==~ /release.*/){
stage("Deploy"){
echo 'Deployed release to QA'
}
Здесь я хочу определить это регулярное выражение таким образом для любой ветви шаблона
*release*
(имеется в виду любая ветвь со строкой выпуска в ней).
Как этого добиться?
И аналогично, как добиться чего-то вроде :-
если ветвь является чем угодно, но не разработкой, освоением, выпуском (шаблоном).
Комментарии:
1. Огромное спасибо. Это сработало как по волшебству.
Ответ №1:
Если вы используете groovy, вы можете использовать следующее
if ((env.BRANCH_NAME =~ '.*release.*').matches()) {
stage("Deploy"){
echo 'Deployed release to QA'
}
}
И если вы хотите сопоставить любое имя ветви, кроме develop
, master
или release
, вы можете использовать следующее регулярное выражение
if ((env.BRANCH_NAME =~ '^((?!develop|master|release).)*$').matches()) {
stage("Deploy"){
echo 'Deployed release to QA'
}
}
Комментарии:
1. Спасибо! и как это использовать, если мы хотим что-то вроде if(env.BRANCH_NAME!= ‘development’ amp;amp; env.BRANCH_NAME != ‘master’ amp;amp; (env.BRANCH_NAME!=~ «.*release.*»).matches()) Я имею в виду, что оба условия = и != должны соответствовать этому шаблону выпуска
2. поскольку это конвейер по сценарию в jenkins, так что да, он отличный
3. Ну, вам не нужны два первых условия, поскольку
(env.BRANCH_NAME !=~ ".*release.*").matches()
они уже будут выполнены.4. на самом деле мы определили отдельный конвейер для master, разработки и выпуска. итак, нам нужно условие if в том же файле для любой ветви, которая не является master, develop и release. таким образом, это, вероятно, означало бы какое-либо исправление или функциональную ветвь или что-либо другое, кроме этих 3
5. в настоящее время оно выдает ошибку следующим образом:- WorkflowScript: 122: ожидание ‘)’, найдено ‘if’ в строке 122, столбец 2. if(env.BRANCH_NAME != ‘разработка’ amp;amp; env.BRANCH_NAME != ‘мастер’ amp;amp; (env.BRANCH_NAME !=~ «.*release.*»).matches()){ ^ ошибка 1 в org.codehaus.groovy.control. ErrorCollector.failIfErrors(ErrorCollector.java:310)
Ответ №2:
Вы можете использовать это регулярное выражение для сопоставления имен ветвей, таких как develop
, release
, hotfix
.
if (branch_name =~ 'develop|hotfix.*|release.*') {
stage("Deploy") {
echo 'Deployed release to QA'
}
}