考虑以下private void showLocationSettings() {
Snackbar snackbar = Snackbar.make(mainCoordinatorLayout, "Location Error: GPS Disabled!",
Snackbar.LENGTH_LONG)
.setAction("Enable", new View.OnClickListener() {
@Override public void onClick(View v) {
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
});
snackbar.setActionTextColor(Color.RED);
snackbar.setDuration(Snackbar.LENGTH_INDEFINITE);
示例:
.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
分支上此管道的结果是:
master
工作的日志说:
deploy-doc
即使$ echo "Deploying doc..."
"Deploying doc..."
$ type output.txt
The system cannot find the file specified.
ERROR: Build failed: exit status 1
明确依赖于手动deploy-doc
工作工件,build-doc
也不会被触发,从而导致{{1}失败工作。
如何正确实现此行为?也就是说,当自动作业依赖于他时会触发手动作业?
我只想在build-doc
分支上自动构建和部署文档,其他分支机构只能手动构建文档以下载生成的文档。
在接受的答案的附录中,请参阅我自己的答案below。
答案 0 :(得分:3)
最简单的方法是使用trigger。将deploy-doc
作业定义为:
only:
- triggers
使用yaml锚点执行两个build-doc
声明为
only:
- master
另一个
when:
- manual
让build-doc
在结束时调用触发器。这将重建整个管道,因此您可以将build
作业定义为
except:
- triggers
或者使用$CI_JOB_MANUAL
变量并让deploy-doc
仅在master和触发器上运行,所以至少在master上它不会重建所有内容。
答案 1 :(得分:0)
感谢 Jackub Kania 的答案,它指出了我正确的方向,我最终使用yaml锚来解决我的问题。
我只是将实际build-doc
修改为.build-doc-template
锚点作业(刚删除了manual
条件)并创建了两个版本的build-doc
作业,如下所示:
build-doc:
<<: *build-doc-template
only:
- master
build-doc-manual:
<<: *build-doc-template
when: manual
except:
- master
这样,我可以避免触发器复杂化。如果需要,请索取完整的代码。