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?

Author: Vikas Rathore, 2019-02-19

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
 102
Author: Xavier D,
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);
 3
Author: Amina Mansour,
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
 3
Author: Arihant Godha,
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 klauzulami if, 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.

https://about.gitlab.com/images/13_8/var.png -- zmienne pomocnicze dla reguł potoku

Patrzdokumentacja iWydanie .

 3
Author: VonC,
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/

 0
Author: Pixadelic,
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