我有一个.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页面内容)。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。(真实世界日志)。日志上写着:
Uploading artifacts for successful job
00:01
Uploading artifacts...
WARNING: public: no matching files
ERROR: No files to upload 如果我不能访问构建阶段的结果,我做错了什么?
如何在这两种情况下运行script部分,但仍然只能从master分支部署到页面?
发布于 2020-12-21 19:49:21
您不会将public路径工件保存在建造作业中。这就是为什么他们错过了下一个deploy阶段的pages工作。
你有这个:
build_repo:
stage: build
script:
- your script尝试在构建作业中保存工件,如下所示:
build_repo:
stage: build
script:
- your script
artifacts:
when: always
paths:
- public因此,他们将被传递到下一个阶段,deploy和pages作业可以看到他们。
https://stackoverflow.com/questions/65392009
复制相似问题