Как указать подкаталоги артефактов подстановочных знаков в.gitlab-ci.в формате YML?


Я использую GitLab CI для построения решения C# и пытаюсь передать некоторые артефакты сборки с одного этапа сборки на другой.

Проблема заключается в том, что артефакты находятся не в одном каталоге, а в разных подкаталогах, которые, однако, все имеют одинаковые имена 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 30

1 ответ:

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

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

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

artifacts:
  paths:
    - "*/bin"
    - "*/obj"
Обратите внимание, что кавычки (") кажутся обязательными, а также нет разделителя пути в конце.

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

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