web-dev-qa-db-fra.com

gitlab ci: Exécuter le travail de construction en mode manuel ou uniquement en tant que maître

Est-il possible d'avoir un fichier gitlab-ci dans lequel un travail de construction est défini avec les exigences suivantes:

  • être exécuté lorsque manuel OU
  • se faire exécuter par maître Push

J'ai pensé à quelque chose comme ça, mais c'est mal faux:

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

La seule solution pour moi est d’avoir deux tâches, l’une pour le Push maître et l’autre pour la saisie manuelle. Mais l’inconvénient est que, dans gitlab, il devient confus.

10
toni_maccaroni

Je n'ai pas non plus trouvé le moyen de faire cela en un seul bloc et j'ai dû utiliser des ancres Yaml et les scinder en deux blocs distincts: 

.deploy_common: &deploy_common
# common conig HERE

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

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

Si j'avais moi-même eu ce problème, j'ai finalement trouvé la solution (ou une version adaptée à mes besoins de toute façon):

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

Les conditions dans le bloc de variables sont associées OU, donc le travail est exécuté soit sur branche principale, soit à partir du Web (interchangeable avec "manuel", dans mon cas). Cela ne met pas le pipeline en pause comme "when: manual", mais je ne voulais pas qu'il le fasse de toute façon.

Voici les documents: https://docs.gitlab.com/ee/ci/yaml/#only-and-except-complex et https://docs.gitlab.com/ee/ci/ variables/

Espérons que cela aide!

2
Drew Tabor

La chose exacte que vous voulez n'est pas possible pour le moment. Bien que les 2 tâches (une avec only: master et l'autre avec when: manual devraient fournir une alternative.

Si vous les mettez dans la même phase, cela ne devrait pas être aussi déroutant, je suppose.

Vous pouvez également utiliser certaines caractéristiques spéciales yaml like anchors to stay DRY .

1
Stefan van Gastel