web-dev-qa-db-ja.com

.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
55
buygrush

gitlab-ci-multi-runner ビルドランナーは Go を使用してビルドされ、現在 filepath.Glob() を使用して指定されたアーティファクトをスキャンします file_archiver.go

別の質問 here SOで説明されているように、Goは二重星形のグロブ式をサポートしていないようです。そのため、現時点では、フル機能の**/bin式を使用する方法はないようです

ただし、すべてのプロジェクトはソリューションルートの下の同じレベルにあるため、次のようなものを使用することも可能です。

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

引用符(")と末尾のno末尾のパス区切り文字が必要なようです。

また、グロブ式を追加することで、レベルを明示的に追加することも可能です(説明は here )。

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