我需要一个可以手动执行或按夜间计划自动运行的任务。我找到了这个解决方案:
rules:
- changes:
- scheduled
when: always
- when: manual
Run Code Online (Sandbox Code Playgroud)
该解决方案的问题在于,当创建新管道并且任务未运行时,管道将陷入阻塞状态,直到我手动运行它。
为了避免这种情况,我找到了一个建议的解决方法来添加:
allow_failure: true
Run Code Online (Sandbox Code Playgroud)
但这又带来了一个问题,如果任务在夜间运行时失败,那么管道不会失败,并且我不会收到电子邮件通知。
有办法解决这个问题吗?
syt*_*ech 12
您可以allow_failure使用 有条件地设置rules:。因此,不要allow_faulure:在作业上设置密钥,而是在任何导致作业成为“手动”的规则中设置它。
rules:
- changes:
- scheduled
when: always
- when: manual
allow_failure: true
Run Code Online (Sandbox Code Playgroud)
另外,根据您的描述,最好使用如下规则:
myjob:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: always
allow_failure: false
- when: manual
allow_failure: true
Run Code Online (Sandbox Code Playgroud)
防止管道被此作业阻塞的另一种方法是让它在阶段中运行.post并needs: []立即运行。这样,它就永远不会导致其他作业等待它。
myjob:
needs: []
stage: .post
# ...
Run Code Online (Sandbox Code Playgroud)
可能有更好的解决方案,但另一种解决方法可能是有两个单独的作业,其中包含规则并模板化其他所有内容。例如:
.build_template: &build_template
image: ubuntu:18.04
script:
- echo "hello world"
build_manual:
<<: *build_template
when: manual
except:
- schedules
build_nightly:
<<: *build_template
only:
- schedules
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11420 次 |
| 最近记录: |