Gitlab CI:为 CI 构建并合并请求但仅发布 CI 到页面
Gitlab CI: build for CI and Merge request but publish only CI to pages
我有一个 .gitlab-ci.yml
文件,我想将其用于 运行 合并请求验证脚本。应该在 CI 中使用相同的脚本,但只有在那里结果才应该发布到 gitlab 页面。另外,只有 CI 的结果应该被缓存。
这是当前.gitlab-ci.yml
的简化版本:
pages:
stage: deploy
script:
- mkdir public/
- touch public/file.txt
artifacts:
paths:
- public
only:
- master
cache:
paths:
- fdroid
(真实代码在 fdroid-firefox gitlab 仓库中。)
管道的触发方式有两种。取决于此,我是否要发布到页面:
- 通过合并请求验证。在这种情况下,我想执行
script
部分,但我不想发布或缓存结果(否则,任何有权创建合并请求的人都可以覆盖 gitlab 页面内容)。
- by CI(在签到
master
分支机构并遵循时间表后触发)。在这种情况下,我希望缓存结果并更新 gitlab 页面。
我已经尝试过拆分阶段:
stages:
- build
- deploy
build_repo:
stage: build
script:
- mkdir public/
- touch public/file.txt
pages:
stage: deploy
script: echo "publish to Gitlab pages"
artifacts:
paths:
- public
only:
- master
cache:
paths:
- fdroid
(原始 .gitlab-ci.yml
文件)
但是通过这样做,pages:deploy
阶段失败了,因为它无法访问 build
阶段的结果。 pages:deploy
阶段显示错误符号,并在工具提示上显示 missing pages artifacts
。 (real world log)。
日志说:
Uploading artifacts for successful job
00:01
Uploading artifacts...
WARNING: public: no matching files
ERROR: No files to upload
我做错了什么,我无法访问构建阶段的结果?
如何在这两种情况下 运行 script
部分,但仍仅从 master
分支部署到页面?
您没有在 build job 中保存 public
路径工件。这就是为什么他们在下一个 deploy
阶段 pages
工作中失踪。
你有这个:
build_repo:
stage: build
script:
- your script
尝试像这样在构建作业中保存工件:
build_repo:
stage: build
script:
- your script
artifacts:
when: always
paths:
- public
因此它们将被传递到下一阶段 deploy
并且 pages
工作可以看到它们。
我有一个 .gitlab-ci.yml
文件,我想将其用于 运行 合并请求验证脚本。应该在 CI 中使用相同的脚本,但只有在那里结果才应该发布到 gitlab 页面。另外,只有 CI 的结果应该被缓存。
这是当前.gitlab-ci.yml
的简化版本:
pages:
stage: deploy
script:
- mkdir public/
- touch public/file.txt
artifacts:
paths:
- public
only:
- master
cache:
paths:
- fdroid
(真实代码在 fdroid-firefox gitlab 仓库中。)
管道的触发方式有两种。取决于此,我是否要发布到页面:
- 通过合并请求验证。在这种情况下,我想执行
script
部分,但我不想发布或缓存结果(否则,任何有权创建合并请求的人都可以覆盖 gitlab 页面内容)。 - by CI(在签到
master
分支机构并遵循时间表后触发)。在这种情况下,我希望缓存结果并更新 gitlab 页面。
我已经尝试过拆分阶段:
stages:
- build
- deploy
build_repo:
stage: build
script:
- mkdir public/
- touch public/file.txt
pages:
stage: deploy
script: echo "publish to Gitlab pages"
artifacts:
paths:
- public
only:
- master
cache:
paths:
- fdroid
(原始 .gitlab-ci.yml
文件)
但是通过这样做,pages:deploy
阶段失败了,因为它无法访问 build
阶段的结果。 pages:deploy
阶段显示错误符号,并在工具提示上显示 missing pages artifacts
。 (real world log)。
日志说:
Uploading artifacts for successful job
00:01
Uploading artifacts...
WARNING: public: no matching files
ERROR: No files to upload
我做错了什么,我无法访问构建阶段的结果?
如何在这两种情况下 运行 script
部分,但仍仅从 master
分支部署到页面?
您没有在 build job 中保存 public
路径工件。这就是为什么他们在下一个 deploy
阶段 pages
工作中失踪。
你有这个:
build_repo:
stage: build
script:
- your script
尝试像这样在构建作业中保存工件:
build_repo:
stage: build
script:
- your script
artifacts:
when: always
paths:
- public
因此它们将被传递到下一阶段 deploy
并且 pages
工作可以看到它们。