如何在.gitlab-ci.yml中指定通配符工件子目录?

buy*_*ush 56 yaml gitlab-ci gitlab-8

我正在使用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
  ...
Run Code Online (Sandbox Code Playgroud)

我尝试使用不同的方式捕获工件,例如

**/bin/
**/obj/
Run Code Online (Sandbox Code Playgroud)

(语法无效),或

.*/bin/
.*/obj/
Run Code Online (Sandbox Code Playgroud)

但那个没有找到任何文物,就像/**/bin/并且/**/obj/,给我以下错误:

Uploading artifacts...
WARNING: /**/bin/: no matching files
WARNING: /**/obj/: no matching files
Run Code Online (Sandbox Code Playgroud)

如何指定要扫描工件的子目录模式?或者这甚至可能吗?

简单地使用

artifacts:
  untracked: true
Run Code Online (Sandbox Code Playgroud)

不是一个选项,因为一个巨大的未跟踪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
Run Code Online (Sandbox Code Playgroud)

buy*_*ush 72

gitlab-CI-多亚军构建亚军是使用内置围棋和目前使用filepath.Glob()扫描在任何指定的文物file_archiver.go.

围棋似乎并不支持双星全局正则表达式中的另一个问题讨论这里的SO.所以目前似乎没有办法使用功能齐全的**/bin表达方式.

但是因为我的所有项目都位于解决方案根目录下的同一级别,所以仍然可以使用类似的东西

artifacts:
  paths:
    - "*/bin"
    - "*/obj"
Run Code Online (Sandbox Code Playgroud)

请注意,引号(")似乎是必需的,并且最后没有尾随路径分隔符.

它也应该可以通过增加更多的通配表达式(如描述明确添加更多的级别在这里):

paths:
  ...
  - "*/obj"
  - "*/*/bin"
  - "*/*/obj"
  ...
Run Code Online (Sandbox Code Playgroud)

  • 没有尾随斜线!我花了太长时间才弄清楚这一点.我还发现,在使用*或%(Windows批处理文件变量扩展)等字符启动路径时,我只需要引号. (10认同)
  • 我发现双引号是必要的. (7认同)
  • 您需要使用引号,因为“*”是 YAML 中的特殊字符,是一个[别名](https://yaml.org/spec/1.2/spec.html#alias)。这是您必须引用的[所有特殊字符的列表](https://symfony.com/doc/current/components/yaml/yaml_format.html#strings)。“虽然您可以使用双引号,但对于这些字符,使用单引号更方便,这样可以避免转义任何反斜杠``\``”。不知道为什么尾随“/”不适用于全局变量。似乎 gitlab 不允许它并且与 YAML 无关。 (3认同)
  • @dosentmatter tyvm - 这是一个令人烦恼的头痛。 (2认同)