web-dev-qa-db-fra.com

Comment spécifier des sous-répertoires d'artefacts génériques dans le fichier .gitlab-ci.yml?

J'utilise GitLab CI pour construire une solution C # et essayer de transmettre des artefacts de construction d'un stade à l'autre.

Le problème est que les artefacts ne se trouvent pas dans un seul répertoire, mais dans des sous-répertoires différents, qui portent tous le même nom bin/ ou obj/.

Ma .gitlab-ci.yml ressemble à ceci:

...
stages:
  - build
  - test

build:
  stage: build
  script:
    CALL %MSBuild% ...
  artifacts:
    paths:
      - /**/bin/
      - /**/obj/
    expire_in: 6 hrs

test:
  stage: test
  dependencies:
    - build
  ...

J'ai essayé de capturer les artefacts de différentes manières, par exemple.

**/bin/
**/obj/

(syntaxe non valide), ou

.*/bin/
.*/obj/

mais celui-ci n'a trouvé aucun artefact, tout comme /**/bin/ et /**/obj/, me donnant les erreurs suivantes:

Uploading artifacts...
WARNING: /**/bin/: no matching files
WARNING: /**/obj/: no matching files

Comment puis-je spécifier un motif de sous-répertoire à analyser pour rechercher des artefacts? Ou est-ce même possible?

Simplement en utilisant

artifacts:
  untracked: true

n'est pas une option, à cause d'un énorme packages/ sous-répertoire, ce qui entraîne l'échec du téléchargement des artefacts en raison d'une archive trop volumineuse:

Uploading artifacts...
untracked: found 4513 files                        
ERROR: Uploading artifacts to coordinator... too large archive  id=36 responseStatus=413 Request Entity Too Large token=...
FATAL: Too large
55
buygrush

Le programme de construction gitlab-ci-multi-runner est construit à l'aide de Go et utilise actuellement filepath.Glob () pour rechercher les artefacts spécifiés dans file_archiver.go .

Go ne semble pas supporter l’expression double star glob, comme indiqué dans une autre question ici à SO. Donc il semble n'y avoir aucun moyen d'utiliser une expression complète **/bin Pour le moment .

Cependant, étant donné que tous mes projets sont situés au même niveau sous la racine de la solution, il est toujours possible d’utiliser quelque chose comme:

artifacts:
  paths:
    - "*/bin"
    - "*/obj"

Notez que les guillemets (") Semblent être nécessaires, ainsi que non séparateur de chemin de fin à la fin.

Il devrait également être possible d'ajouter explicitement plus de niveaux en ajoutant plus d'expressions globbing (comme décrit ici ):

paths:
  ...
  - "*/obj"
  - "*/*/bin"
  - "*/*/obj"
  ...
71
buygrush