Как указать подкаталоги подстановочных артефактов в .gitlab-ci.yml?
Я использую GitLab CI для создания решения С# и пытаюсь передать некоторые артефакты сборки с одного этапа сборки на другой.
Проблема заключается в том, что артефакты не расположены в одном каталоге, а в разных подкаталогах, которые, однако, имеют одинаковые имена bin/
или obj/
.
Мой .gitlab-ci.yml
выглядит следующим образом:
...
stages:
- build
- test
build:
stage: build
script:
CALL %MSBuild% ...
artifacts:
paths:
- /**/bin/
- /**/obj/
expire_in: 6 hrs
test:
stage: test
dependencies:
- build
...
Я попытался захватить артефакты различными способами, например.
**/bin/
**/obj/
(недопустимый синтаксис) или
.*/bin/
.*/obj/
но он не обнаружил никаких артефактов, как /**/bin/
и /**/obj/
, что дало мне следующие ошибки:
Uploading artifacts...
WARNING: /**/bin/: no matching files
WARNING: /**/obj/: no matching files
Как указать шаблон подкаталога для сканирования артефактов? Или это вообще возможно?
Просто используя
artifacts:
untracked: true
не является опцией из-за огромного неподписанного подкаталога packages/
, что приводит к сбою загрузки артефактов из-за слишком большого архива:
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
Ответы
Ответ 1
Сборщик gitlab-ci-multi-runner построен с использованием Go и в настоящее время использует filepath.Glob() для поиска любых указанных артефактов в file_archiver.go.
Похоже, что Go не поддерживает выражение с двойной звездой, как обсуждалось в другом вопросе здесь в SO. Так что , похоже, в настоящее время нет способа использовать полнофункциональное выражение **/bin
.
Поскольку все мои проекты расположены на одном уровне ниже корня решения, все еще можно использовать что-то вроде
artifacts:
paths:
- "*/bin"
- "*/obj"
Обратите внимание, что кавычки ("
) кажутся необходимыми, а также нет разделителя конечного пути в конце.
Также должно быть возможно явно добавить больше уровней, добавив больше выражений-заглушки (как описано здесь):
paths:
...
- "*/obj"
- "*/*/bin"
- "*/*/obj"
...
GitLab отслеживает эту проблему здесь и, возможно, будет исправлена в будущей версии.