2016-06-24 1 views
19

Я использую GitLab CI для создания решения C# и пытаюсь передать некоторые артефакты сборки с одного этапа сборки на другой.Как указать подкаталоги подстановочных артефактов в .gitlab-ci.yml?

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

ответ

24

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

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

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

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

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

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

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

Я не везло с двойные кавычки вокруг пути. Он работал без них. Кроме того, [doc] (https://docs.gitlab.com/ce/ci/yaml/README.html#artifacts) упоминает только примеры без кавычек. – TmTron

+1

Я обнаружил, что нужны двойные кавычки. – griest

+0

Нечетный, который цитирует вопрос. Но, насколько мне известно, цитирование является частью синтаксиса YAML, поэтому я сомневаюсь, что бегун видит его с кавычками. Интересно, почему для одного человека ему нужны котировки, а для другого ему не нужны кавычки. – nafg