it-swarm.com.de

gitlab ci: Build-Auftrag kann nur manuell oder nur als Master ausgeführt werden

Ist es möglich, eine Gitlab-ci-Datei zu erstellen, wenn ein Build-Job mit den folgenden Anforderungen definiert ist:

  • ausgeführt werden, wenn manuell ODER
  • von Master Push ausgeführt werden

Ich habe an so etwas gedacht, aber das ist schlecht falsch:

build_jar:
stage: build
script:
  - echo "build jar"
artifacts:
  paths:
    - jar/path/*.jar
only:
  - master
when: manual

Die einzige Lösung für mich ist, zwei Jobs zu haben, einen für den Master-Push und einen für eine manuelle Eingabe. Der Nachteil ist jedoch, dass es in Gitlab verwirrend wird

10
toni_maccaroni

Ich fand auch keinen Weg, dies in einem Block zu tun, und musste Yaml-Anker verwenden und in zwei separate Blöcke aufteilen: 

.deploy_common: &deploy_common
# common conig HERE

deploy_master_CD:
  <<: *deploy_common
  only:
    refs:
      - master

deploy_manual:
  <<: *deploy_common
  when: manual
9
lukmdo

Das Definieren von zwei Jobs wird mit dem Konfigurationsparameter extends in GitLab 11.3 einfacher. Es ist eine Alternative zur Verwendung von YAML-Ankern und etwas flexibler und lesbarer:

.deploy_common:
  # common config

deploy_master_CD:
  extends: .deploy_common
  only:
    refs:
      - master

deploy_manual:
  extends: .deploy_common
  when: manual
2
mrts

Hatte dieses Problem selbst herausgefunden (oder eine funktionierende Version für meine Bedürfnisse gefunden):

build_jar:
stage: build
script:
  - echo "build jar"
artifacts:
  paths:
    - jar/path/*.jar
only:
  variables:
  - $CI_PIPELINE_SOURCE == "web"
  - $CI_COMMIT_REF_NAME == "master"

Die Bedingungen unter dem Variablenblock werden ODER-verknüpft, sodass der Job ausgeführt wird, wenn er sich entweder im Hauptzweig befindet oder vom Web aus gestartet wird (in meinem Fall mit "manuell" austauschbar). Die Pipeline wird nicht unterbrochen, wie bei "when: manual", aber ich wollte es sowieso nicht.

Hier sind die Dokumente: https://docs.gitlab.com/ee/ci/yaml/#only-and-except-complex und https://docs.gitlab.com/ee/ci/ Variablen/

Hoffentlich hilft das!

2
Drew Tabor

Das genaue, was Sie wollen, ist momentan nicht möglich. Obwohl die 2 Jobs (einer mit only: master und der andere mit when: manual) eine Alternative bieten sollten.

Wenn Sie sie auf dieselbe Stufe setzen, sollte das nicht so verwirrend sein, denke ich.

Sie können auch einige special yaml-Features wie anchors verwenden, um TROCKEN zu bleiben.

1