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
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"
...