Jak uruchomić krok / etap kompilacji tylko w przypadku tworzenia określonej gałęzi?
Na przykład uruchom krok wdrażania tylko wtedy, gdy wywoływana jest gałąź deployment
, pozostawiając wszystko inne bez zmian.
Odpowiedzi:
Robiąc to samo w deklaratywnej składni potoku, poniżej znajduje się kilka przykładów:
stage('master-branch-stuff'){
agent any
when{
branch 'master'
}
steps {
echo 'run this stage - ony if the branch = master branch'
}
}
<b
stage('feature-branch-stuff') {
agent label:'test-node'
when { branch "feature/*" }
steps {
echo 'run this stage - only if the branch name started with feature/'
}
}
<b
stage('expression-branch') {
agent label:'some-node'
when {
expression {
return env.BRANCH_NAME != 'master';
}
}
steps {
echo 'run this stage - when branch is not equal to master'
}
}
<b
stage('env-specific-stuff') {
agent label:'test-node'
when {
environment name: 'NAME', value: 'this'
}
steps {
echo 'run this stage - only if the env name and value matches'
}
}
Nadchodzą bardziej efektywne sposoby -
https://issues.jenkins-ci.org/browse/JENKINS-41187 Zobacz
także -
https://jenkins.io/doc/book/pipeline/syntax/#when
Dyrektywę beforeAgent true
można ustawić, aby uniknąć uruchamiania agenta w celu uruchomienia warunku, jeśli warunek nie wymaga stanu git, aby zdecydować, czy uruchomić:
when { beforeAgent true; expression { return isStageConfigured(config) } }
AKTUALIZACJA
Nowa klauzula
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
równa się - porównuje dwie wartości - łańcuchy, zmienne, liczby, wartości logiczne - i zwraca prawdę, jeśli są równe. Szczerze mówiąc, nie jestem pewien, jak przegapiliśmy dodanie tego wcześniej! Możesz dokonywać porównań „nie równa się”, używając również kombinacji nie {equals ...}.
changeRequest - w najprostszej formie zwróci wartość true, jeśli ten potok buduje żądanie zmiany, takie jak żądanie ściągnięcia GitHub. Możesz również przeprowadzić bardziej szczegółowe sprawdzenia w odniesieniu do żądania zmiany, pozwalając zapytać „czy to jest żądanie zmiany dotyczące oddziału głównego?” i wiele więcej.
buildingTag - prosty warunek, który po prostu sprawdza, czy potok działa na tagu w SCM, a nie na gałęzi lub określonym odwołaniu do zatwierdzenia.
tag - bardziej szczegółowy odpowiednik buildingTag, umożliwiający sprawdzenie samej nazwy tagu.
when{}
warunek zostanie oceniony jako fałszywy. :(
beforeAgent true
aby tego uniknąć
beforeAgent
jest teraz obejściem tego problemu.
Po prostu użyj if
i env.BRANCH_NAME
, na przykład:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
Według innych odpowiedzi dodaję scenariusz równoległych etapów:
pipeline {
agent any
stages {
stage('some parallel stage') {
parallel {
stage('parallel stage 1') {
when {
expression { ENV == "something" }
}
steps {
echo 'something'
}
}
stage('parallel stage 2') {
steps {
echo 'something'
}
}
}
}
}
}