Регулярное выражение спецификатора ветви в конвейере Jenkins scripted

#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'
    }
}