2
votes

Comment réutiliser un before_script à partir d'un fichier yml partagé dans Gitlab CI?

Je sais que vous pouvez réutiliser des blocs de code dans un script avant en utilisant des ancres yaml:

.something_before: &something_before
- echo 'something before'   


before_script:
  - *something_before
  - echo "Another script step"

mais cela ne semble pas fonctionner lorsque le .something_before est déclaré dans un partage .yml fichier via le include:file le include:file . Il ne semble pas que extends des œuvres pour before_script . Quelqu'un connaît-il un moyen de réutiliser certaines étapes dans un before_script partir d'un fichier .yml partagé?

EDIT: Mon cas d'utilisation est que j'ai 2 projets gitlab avec des étapes before_script presque identiques. Je ne veux pas avoir à changer les deux projets chaque fois qu'il y a un changement, donc j'ai un troisième projet Gitlab séparé qui a un modèle .yml que j'inclus via include: file dans les deux projets. Je veux mettre tout le code commun dans ce modèle partagé, et avoir juste comme deux lignes before_script pour le projet git qui a les deux étapes supplémentaires.


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser extend sans aucun problème, mais vous devrez écraser tout le bloc before_script .

Si vous voulez changer juste un morceau de votre before_script, utilisez un script shell pour le faire

Définissez la condition if à l'intérieur de votre modèle

before_script
  - | 
    if [ condition ]
    then
      commands here
    fi

APRÈS EDIT: Vous pouvez utiliser des variables pour y parvenir

Projet 1: VAR = command 1

Projet 2: VAR = command 2

Vous pouvez définir le contenu de env var sur le fichier gitlab-ci.yml ou sur les paramètres CI / CD de chaque projet!


2 commentaires

J'ai modifié mon message pour inclure des informations plus pertinentes. Dans mon cas, est-ce que je mettrais simplement votre code à l'intérieur du modèle partagé, la "condition" étant le nom du projet qui comporte les étapes supplémentaires?


Oui! et maintenant je mets une autre approche ... avec des variables



2
votes

Les ancres Yaml ne fonctionnent pas avec les fichiers inclus. Vous devez utiliser le mot extends clé extend. Mais ce que vous voulez réaliser ne fonctionnera pas avec before_script car le code de votre modèle sera écrasé dans le travail qui utilise le modèle s'il existe également un before_script .

Avez-vous vraiment besoin d'un before_script dans votre travail spécifique ou pouvez-vous réaliser la même chose avec un script normal? Si oui, vous pouvez faire quelque chose comme ceci:

Fichier modèle:

include:
  - project: 'my-group/my-project'
    file: '/something_before.yml'

stages:
  - something

something:
  stage: something
  extends: .something_before
  script:
    - echo 'additional stuff to do'

Pipeline du projet:

.something_before:
  before_script:
    - echo 'something before'
    - echo 'something more before' 

Et votre section before_script sera fusionnée dans le travail quelque chose et exécutée avant la partie script .


0 commentaires

1
votes

Voyez si GitLab 13.6 (novembre 2020) facilite les choses:

Inclure plusieurs fichiers de configuration CI / CD sous forme de liste

Auparavant, lors de l'ajout de plusieurs fichiers à votre configuration CI / CD à l'aide de la syntaxe include:file , vous deviez spécifier le projet et la référence pour chaque fichier. Dans cette version, vous avez désormais la possibilité de spécifier le projet, la référence et de fournir une liste de fichiers en une seule fois. Cela vous évite d'avoir à vous répéter et rend la configuration de votre pipeline moins verbeuse.

https://about.gitlab.com/images/13_6/list.png - Inclut plusieurs fichiers de configuration CI / CD sous forme de liste

Voir documentation ) et problème .


0 commentaires