Подтвердить что ты не робот

Как указать подкаталоги подстановочных артефактов в .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
4b9b3361

Ответ 1

Сборщик gitlab-ci-multi-runner построен с использованием Go и в настоящее время использует filepath.Glob() для поиска любых указанных артефактов в file_archiver.go.

Похоже, что Go не поддерживает выражение с двойной звездой, как обсуждалось в другом вопросе здесь в SO. Так что , похоже, в настоящее время нет способа использовать полнофункциональное выражение **/bin.

Поскольку все мои проекты расположены на одном уровне ниже корня решения, все еще можно использовать что-то вроде

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

Обратите внимание, что кавычки (") кажутся необходимыми, а также нет разделителя конечного пути в конце.

Также должно быть возможно явно добавить больше уровней, добавив больше выражений-заглушки (как описано здесь):

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

GitLab отслеживает эту проблему здесь и, возможно, будет исправлена в будущей версии.