cid*_*cid 6 continuous-integration gitlab gitlab-ci
考虑以下.gitlab-ci.yml示例:
build:
stage: build
script: echo "Building..."
build-doc:
stage: build
when: manual
script:
- echo "Building doc..."
- echo "build result" > output.txt
artifacts:
name: "%CI_BUILD_NAME%_%CI_BUILD_ID%"
expire_in: 1 week
paths:
- "output.txt"
deploy-doc:
stage: deploy
only:
- master
dependencies:
- build-doc
script:
- echo "Deploying doc..."
- type output.txt
Run Code Online (Sandbox Code Playgroud)
这个管道在master分支上的结果是:
deploy-doc作业日志说:
$ echo "Deploying doc..."
"Deploying doc..."
$ type output.txt
The system cannot find the file specified.
ERROR: Build failed: exit status 1
Run Code Online (Sandbox Code Playgroud)
即使deploy-doc明确依赖于手动build-doc作业工件,build-doc也不会触发导致deploy-doc作业失败。
如何正确实现此行为?也就是说,当自动作业依赖于他时会触发手动作业?
我只想在分支上自动构建和部署文档master,其他分支只能手动构建文档来下载生成的文档。
除了已接受的答案,请参阅下面我自己的答案。
最简单的方法是使用触发器。将deploy-doc工作定义为:
only:
- triggers
Run Code Online (Sandbox Code Playgroud)
使用 yaml 锚点做两份build-doc声明为
only:
- master
Run Code Online (Sandbox Code Playgroud)
另一个作为
when:
- manual
Run Code Online (Sandbox Code Playgroud)
有build-doc呼叫触发何时结束。这将重建整个管道,因此您可以将build作业定义为
except:
- triggers
Run Code Online (Sandbox Code Playgroud)
或者使用$CI_JOB_MANUAL变量并且deploy-doc只在 master 和 triggers 上运行,所以至少在 master 上它不会重建所有东西。