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
gitlab-ci-multi-runner ビルドランナーは Go を使用してビルドされ、現在 filepath.Glob() を使用して指定されたアーティファクトをスキャンします file_archiver.go 。
別の質問 here SOで説明されているように、Goは二重星形のグロブ式をサポートしていないようです。そのため、現時点では、フル機能の**/bin
式を使用する方法はないようです。
ただし、すべてのプロジェクトはソリューションルートの下の同じレベルにあるため、次のようなものを使用することも可能です。
artifacts:
paths:
- "*/bin"
- "*/obj"
引用符("
)と末尾のno末尾のパス区切り文字が必要なようです。
また、グロブ式を追加することで、レベルを明示的に追加することも可能です(説明は here )。
paths:
...
- "*/obj"
- "*/*/bin"
- "*/*/obj"
...