Я использую сценарий Jenkins Pipeline и хочу определить выражение метки, например expr1 AND NOT expr2
.
Поэтому я использовал node('expr1 && !expr2'){}
, но это (иногда) выделяло узел, у которого есть и expr1
, и expr2
.
Я также пробовал с node('expr1' && '!expr2'){}
, но тот же результат.
Каков правильный синтаксис, чтобы сказать expr1 AND NOT expr2
в скриптовом конвейере?
Попробуйте (метка1) && !(метка2)
Koshuke подробно описывает улучшения этикетки для Jenkins здесь (старый): https://jenkins.io/blog/2010/09/02/recent-label-and-matrix-project-improvement/
Но, возможно, лучше резюмировать здесь: https://kb.novaordis.com/index.php/Jenkins_Job_Label_Expression
Операторы
Указывается в порядке убывания приоритета:
(выражение) - определяет ассоциативность выражения.
!выражение - отрицание.
a && b - AND, оба выражения должны быть истинными.
а || b - ИЛИ, любое из выражений a или b может быть истинным.
a -> b - "подразумеваемый" оператор, эквивалентный !a || б. Например, если используется выражение «linux -> x64», оно интерпретируется следующим образом: если используется агент Linux, то агент должен быть 64-битным.
a <-> b - оператор "если и только если", эквивалентный a && b || !а && !б
Также в официальных документах: https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#node-allocate-node
Спасибо, но я совершил глупую ошибку: выражение моей метки было правильным, но я проверил свой Jenkinsfile из неправильной ветки...
Мы используем этот формат для некоторых заданий:
node ("Label1 && !Label2")
Если вы перейдете к генератору сниппетов (hostjenkins/pipeline-syntax), выберите шагNode: Allocate Node
там есть некоторая документация + вы можете сгенерировать шаг сценария конвейера.