Est-il possible d'avoir un fichier gitlab-ci dans lequel un travail de construction est défini avec les exigences suivantes:
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.
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
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!
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 .