Jak używać if-else warunek na gitlabci
Jak używać if else warunek wewnątrz gitlab-CI.
Mam poniżej kod:
deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- kubectl apply -f demo1 --record=true
- kubectl apply -f demo2 --record=true
Teraz chcę dodać warunek coś takiego
script:
- (if [ "$flag" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true);
Czy ktoś mógłby podać poprawną składnię tego samego? Czy istnieje dokumentacja warunków (if-else, for loop) w gitlabci?
5 answers
Poniżej Trzy opcje składni dla tego rodzaju instrukcji. Z gitlab-ci documentation :
Użycie zmiennej shell
deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- if [ "$flag" == "true" ]; then MODULE="demo1"; else MODULE="demo2"; fi
- kubectl apply -f ${MODULE} --record=true
Użycie zmiennej shell z blokiem multiline yaml
deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- >
if [ "$flag" == "true" ]; then
kubectl apply -f demo1 --record=true
else
kubectl apply -f demo2 --record=true
fi
Używanie reguł gitlab
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_PIPELINE_SOURCE == "push"'
when: never
- when: always
Używanie szablonów i zmiennych gitlab
demo1-deploy-dev:
extends: .deploy-dev
only:
variables: [ $flag == "true" ]
variables:
MODULE: demo1
demo2-deploy-dev:
extends: .deploy-dev
only:
variables: [ $flag == "false" ]
variables:
MODULE: demo2
.deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- kubectl apply -f ${MODULE} --record=true
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-30 13:35:01
Myślę, że musisz po prostu dodać średnik i zamknąć " fi " na końcu. Nie mogłem znaleźć linka do dokumentacji.
script:
- (if [ "$flag" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true; fi);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-19 09:54:21
Możesz rozważyć sprawdzenie zasad
Pozwala na ocenę listy poszczególnych obiektów reguł w kolejności, aż do dopasowania i dynamicznego dostarczenia atrybutów do zadania.
Dostępne klauzule reguły obejmują:
- if (similar to only:variables)
- zmiany (takie same jak tylko:zmiany)
- istnieje
Przykład:
job:
script: "echo Hello, Rules!"
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
when: always
- if: '$VAR =~ /pattern/'
when: manual
- when: on_success
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-12 03:39:09
Zauważ, że z GitLab 13.3 (Sierpień 2020), wprowadzono ulepszenie składni reguły if-else:
Reguły CI / CD: if obsługują wyrażenia logiczne z nawiasami
Jeśli używasz słowa kluczowego
rules
z klauzulamiif
, jest ono teraz jeszcze bardziej wydajne, z obsługą wyrażeń bracketowanych ocenianych przez procesor potoku.Możesz używać bardziej złożonych i wydajnych wyrażeń i (
&&
) / lub (||
), dzięki czemu reguły potoków są bardziej logiczne, potężny i łatwiejszy w zarządzaniu.Patrz dokumentacja i Wydanie .
I, z GitLab 13.8 (Styczeń 2021)
Zmienne pomocnicze dla reguł potoku
Poprzednio słowo kluczowe
rules
było ograniczone w zakresie i określało tylko, czy zadanie powinno zostać włączone lub wyłączone z potoków. W tej wersji możesz zdecydować, czy określone warunki są spełnione, a następnie nadpisać zmienne w zadaniach, zapewniając więcej elastyczność podczas konfigurowania potoków.Patrzdokumentacja iWydanie .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-23 21:29:25
Dodatkowo, w przypadku bloku wielowierszowego, jeśli chcesz lub musisz zachować podziały linii, możesz użyć znaku rury:
script: |
if [ "$flag" == "true" ]; then
kubectl apply -f demo1 --record=true
else
kubectl apply -f demo2 --record=true
fi
Aby wejść głębiej, odwiedź https://yaml-multiline.info/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-16 10:27:08