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

не вариант, из-за огромного untracked 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 build runner построен с использованием Go и в настоящее время использует путь_к_файлу.Glob () для сканирования любых указанных артефактов в file_archiver.go.

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

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

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

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

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

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