GitLab-Pipeline
一、Pipeline开发工具
- 流水线视图
- 流水线编辑器
- Job作业视图
- Schedules 定时运行
- 环境变量
1.1 流水线视图

1.2 Schedule

1.3 环境变量

二、CI/CD设置
- 全局配置
- 是否公开访问Pipeline信息;
- 是否自动取消相同分支已经在构建的Pipeline;
- 部署Job成功后,跳过其他还未运行的部署作业;
- ci文件的本地或远程位置;
- 为项目设置流水线状态标志
skip ci

三、Pipeline语法
3.1 Stages
If stages is not defined in the .gitlab-ci.yml file, the default pipeline stages are:

设置settiing CI/CD General pipelines - CI/CD configure file
ci/stages.yml
pipeline editor: 编写新的pipeline
顺序运行
修改 gitlab-runner - config.toml 配置
concurrent = 10
1 | stages: |

3.2 variables
1 | variables: |
3.3 jobs
| 语法关键字 | 作用 | 备注 |
|---|---|---|
| variables | 定义作业中的环境变量 | |
| tags | 根据标签选择运行作业的构建节点 | - 多个标签匹配所有标签构建节点; - 标签可以使用变量 |
| stage | 指定当前作业所属的阶段名称 | |
| before_script | 作业在运行前执行的shell命令行 | |
| script | 作业在运行中执行的shell命令行 | 每个作业至少要包含一个script |
| after_script | 作业在运行后执行的命令行 |
1 | stages: |

如果job没有 定义before ,after script,会使用全局的
3.3.1 job运行控制 allow_failure和when
| 关键字 | 作用 | 备注 |
|---|---|---|
| allow_failure | 控制作业状态,是否允许作业失败,默认值为false。启用后,如果作业运行失败,该作业将在用户界面中显示橙色警告。 | 管道认为作业成功/通过,不会别阻塞。假设所有其他作业均成功,则该作业的阶段及其管道将显示相同的橙色警告。但是,关联的提交将被标记为“通过”,而不会发出警告。 |
| when | 根据状态控制作业运行,当前面作业成功或者失败时运行。 | on_success前面阶段成功时执行(默认值); on_failure前面阶段失败时运行 always总是执行 manual手动执行 delayed延迟执行 never永不执行 |
1 | stages: |


1 | stages: |

manual 必须前面所有的阶段都是success
1 | stages: |

3.3.2 job运行控制retry和timeout
| 关键字 | 作用 | 备注 |
|---|---|---|
| retry | 作业重新运行,遇到错误重新运行的次数 | 值为整数 等于或大于0,但小于等于2 异常分类 |
| timeout | 作业运行超时时间 | |
| rules | 根据特定的变量或文件变更来控制作业运行; | if changes exists |
| needs | 作业依赖控制 | needs:[“作业名称”] |
| parallel | 生成多个作业,并行运行 | parallel:5 值2-50之间 |
1 | stages: |

配合条件使用,job2 不会retry
1 | stages: |
3.4 rules
GitLab CI 的 rules 是从上到下匹配,匹配到第一个条件就停止,不再继续往后判断。
job1 不会运行
1 | stages: |
运行job1
1 | stages: |
changes 文件更改了触发job
1 | stages: |
变更文件触发

1 | stages: |
增加Dockerfile
手动运行job3

3.5 needs
job2 执行完 执行job3
1 | stages: |
并行执行某一个job
1 | job2: |

3.6 Pipeline运行控制
workflow 控制流水线
job1 未运行
1 | variables: |
提交跳过Pipeline触发 [skip ci]
trigger触发Pipeline运行
1
2
3
4
5
6 trigger:
project: mygroup/myproject
trigger:
branch: dev
1 | stages: |
1 | stages: |

API触发Pipeline
Pipeline trigger tokens
Add new pipeline trigger token
1 | glptt-xauekxkMkLxx5Asf75Gy |
Use cURL
1 | curl -X POST \ |
Use .gitlab-ci.yml
1 | script: |
Use webhook (POST requests only)
1 | http://192.168.11.200/api/v4/projects/1/ref/REF_NAME/trigger/pipeline?token=TOKEN |
Pass job variables
To pass variables to the triggered pipeline, add variables[VARIABLE]=VALUE to the API request.
cURL:
1 | curl -X POST \ |
Webhook (POST requests only):
1 | http://192.168.11.200/api/v4/projects/1/ref/REF_NAME/trigger/pipeline?token=TOKEN&variables[RUN_NIGHTLY_BUILD]=true |
1 | root@gitlab:~# curl -X POST \ |
3.8 Pipeline Template
- extend
- include
1 | 新建项目: devops/devops-ci-lib |
使用
1 | stages: |

3.9 配置提交阶段流水线
- 提交代码后自动触发Pipeline运行
初始化一个spring 项目

推送至仓库
1 | cd /tmp |
1 | .build: |
安装maven 安装过java
1 | [root@jenkins gitlab-runner]# wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz |
1 | include: |

