当一定的条件满足后, Gitlab会触发项目中的 .gitlab-ci.yml 中定义的pipeline, 典型的场景有
1、当仓库中某个分支有代码push的时候
2、定期触发:例如某个分支每个月22号触发, 或者每天触发 (使用cron语法,用 Fugit解析)
3、使用API来外部系统触发
根据触发条件,我们可以把gitlab pipeline分为以下几种:
触发方式 | pipeline分类 | 所带的refspec(决定了runner拉取哪些代码) |
---|
push | Pipeline for Branches | +<sha>:refs/pipelines/<id>
+refs/heads/<name>:refs/remotes/origin/<name>
|
push | pipeline for Tags | +<sha>:refs/pipelines/<id>
+refs/tags/<name>:refs/tags/<name>
|
push | Pipeline for Merge Requests | +<sha>:refs/pipelines/<id> |
定时 |
|
|
人工 |
|
|
API |
|
|
每次push触发的pipeline
push后, push的每一个branch,本次push在一个branch的最后一个提交触发一个pipeline
push中如果有tag,触发tag pipeline
push在一个merge request的source分支,则有可能会触发一个 merge reqest pipeline,
在界面上规划一个Pipeline:
1、触发者有目标分支的merge权限
2、.gitlab-ci.yml有效,不能有语法错误
规划的Pipeline有一个owner,执行此pipeline是使用owner的密码执行。
具体的触发方式可以参考 rule 的if语句:https://docs.gitlab.com/ee/ci/jobs/job_control.html#common-if-clauses-for-rules