如何在 gitlab-runner 作业之间共享工件,而不公开它们以供下载?
How to share artifacts between gitlab-runner jobs, without exposing them for download?
我正在为 WPF C# 项目处理 .NET 配置文件。我的 build_job 创建了我的 test_job 需要访问的 dll。目前我一直在做这样的事情:
build_job:
stage: build
only:
- tags
script:
- '"%NUGET_PATH%" restore'
- '"%MSBUILD_PATH%" /p:Configuration=Release'
artifacts:
expire_in: 1 week
paths:
- "%RELEASE_FOLDER%AutoBuildWpfTest.exe"
- "%RELEASE_FOLDER%NLog.config"
- "%RELEASE_FOLDER%NLog.dll"
- "%TEST_FOLDER%Tests.dll"
test_job:
stage: test
only:
- tags
script:
- '"%NUNIT_RUNNER_PATH%" %TEST_FOLDER%Tests.dll'
dependencies:
- build_job
此方法的问题是我的 artifacts.zip 文件现在被仅用于测试但实际部署不需要的文件污染。
我的问题是如何在作业之间共享文件而不让它们出现在 artifacts.zip 中?
此外,有没有什么方法可以在不保留目录树的情况下将文件添加到 artifacts.zip?在构建 .NET 项目时,您最终会得到一些非常深的目录,例如我的输出可执行文件位于:
AutoBuildWpfTest\bin\Release\
,所以当它们被压缩时,当您尝试打开它们时,您必须经过 4 个文件夹级别才能找到您想要的文件。理想情况下,我希望所有输出文件都位于 artifact.zip 的根目录中。谢谢
我看到的唯一方法是从测试阶段获取工件,因此您的 .yml 可能如下所示:
build_job:
stage: build
only:
- tags
script:
- '"%NUGET_PATH%" restore'
- '"%MSBUILD_PATH%" /p:Configuration=Release'
artifacts:
expire_in: 1 week
paths:
- "%RELEASE_FOLDER%AutoBuildWpfTest.exe"
- "%RELEASE_FOLDER%NLog.config"
- "%RELEASE_FOLDER%NLog.dll"
- "%TEST_FOLDER%Tests.dll"
test_job:
stage: test
only:
- tags
script:
- '"%NUNIT_RUNNER_PATH%" %TEST_FOLDER%Tests.dll'
- mv %RELEASE_FOLDER%AutoBuildWpfTest.exe AutoBuildWpfTest.exe
- mv %RELEASE_FOLDER%NLog.config NLog.config
- mv %RELEASE_FOLDER%NLog.dll NLog.dll
dependencies:
- build_job
artifacts:
expire_in: 1 week
paths:
- "AutoBuildWpfTest.exe"
- "NLog.config"
- "NLog.dll"
然后您可以从 test_job 下载工件。我知道这并不理想,但文档没有显示任何处理单个工件的高级方法。移动文件也应该消除嵌套文件夹的其他问题。我知道这也不理想,但这是我发现的唯一有效方法
我正在为 WPF C# 项目处理 .NET 配置文件。我的 build_job 创建了我的 test_job 需要访问的 dll。目前我一直在做这样的事情:
build_job:
stage: build
only:
- tags
script:
- '"%NUGET_PATH%" restore'
- '"%MSBUILD_PATH%" /p:Configuration=Release'
artifacts:
expire_in: 1 week
paths:
- "%RELEASE_FOLDER%AutoBuildWpfTest.exe"
- "%RELEASE_FOLDER%NLog.config"
- "%RELEASE_FOLDER%NLog.dll"
- "%TEST_FOLDER%Tests.dll"
test_job:
stage: test
only:
- tags
script:
- '"%NUNIT_RUNNER_PATH%" %TEST_FOLDER%Tests.dll'
dependencies:
- build_job
此方法的问题是我的 artifacts.zip 文件现在被仅用于测试但实际部署不需要的文件污染。
我的问题是如何在作业之间共享文件而不让它们出现在 artifacts.zip 中?
此外,有没有什么方法可以在不保留目录树的情况下将文件添加到 artifacts.zip?在构建 .NET 项目时,您最终会得到一些非常深的目录,例如我的输出可执行文件位于:
AutoBuildWpfTest\bin\Release\
,所以当它们被压缩时,当您尝试打开它们时,您必须经过 4 个文件夹级别才能找到您想要的文件。理想情况下,我希望所有输出文件都位于 artifact.zip 的根目录中。谢谢
我看到的唯一方法是从测试阶段获取工件,因此您的 .yml 可能如下所示:
build_job:
stage: build
only:
- tags
script:
- '"%NUGET_PATH%" restore'
- '"%MSBUILD_PATH%" /p:Configuration=Release'
artifacts:
expire_in: 1 week
paths:
- "%RELEASE_FOLDER%AutoBuildWpfTest.exe"
- "%RELEASE_FOLDER%NLog.config"
- "%RELEASE_FOLDER%NLog.dll"
- "%TEST_FOLDER%Tests.dll"
test_job:
stage: test
only:
- tags
script:
- '"%NUNIT_RUNNER_PATH%" %TEST_FOLDER%Tests.dll'
- mv %RELEASE_FOLDER%AutoBuildWpfTest.exe AutoBuildWpfTest.exe
- mv %RELEASE_FOLDER%NLog.config NLog.config
- mv %RELEASE_FOLDER%NLog.dll NLog.dll
dependencies:
- build_job
artifacts:
expire_in: 1 week
paths:
- "AutoBuildWpfTest.exe"
- "NLog.config"
- "NLog.dll"
然后您可以从 test_job 下载工件。我知道这并不理想,但文档没有显示任何处理单个工件的高级方法。移动文件也应该消除嵌套文件夹的其他问题。我知道这也不理想,但这是我发现的唯一有效方法