GitLab Runner管道配置解析
本地离线文档部署
=
docker run -it -d -p 8080:8080 registry.gitlab.com/gitlab-org/gitlab-docs:latest #使用最新版本镜像
访问:http://{IP}:8080/latest/ee/ci/yaml/README.html <br></br>
.gitlab-ci.yml 在线参考文档:https://docs.gitlab.com/ee/ci/yaml/
1.管道语法验证流程
进入项目后,访问CI/CD模块的Pipeline页面,选择CI配置选项

输入配置内容,点击校验按钮

2.作业配置规范
每个项目通过.gitlab-ci.yml文件定义CI/CD流程。
配置中包含多个任务单元,每个任务执行独立命令。命令可为shell脚本或可执行程序
任务需满足:
- 唯一名称(非保留字)
- 独立执行
- 至少包含一个执行指令<br></br>
示例
task_a:
command: "execute-task-a"
task_b:
command: "execute-task-b"
3.执行指令配置
定义具体操作命令或脚本
示例
job_config:
command:
- os_info
- run_tests
**注意:** 包含特殊符号的指令需用引号包裹。例如包含冒号的命令需要引号保护,避免YAML解析错误。处理特殊字符时需注意:: { } [ ] , & * # ? | - < > = ! % @
4.前置执行指令
定义任务前执行的初始化命令,必须为数组格式。该指令会与主命令合并执行
示例
pre_commands:
- echo "初始化操作"
5.后置执行指令
定义任务完成后执行的清理命令,必须为数组格式。该指令在独立shell中执行
pre_commands:
- echo "初始化操作"
env_vars:
SITE_DOMAIN: example.org
pipeline_stages:
- build
- release
build_stage:
pre_commands:
- echo "构建前操作"
stage: build
command:
- echo "编译项目"
- echo "打包应用"
post_commands:
- echo "构建后处理"
release_stage:
stage: release
command:
- echo "部署环境"
post_commands:
- echo "全局清理"
注意
后置指令执行失败不影响任务状态。
前置指令失败会导致任务终止,后续任务不再执行。
6.阶段配置
定义任务执行顺序,全局配置。同阶段任务并行执行,不同阶段按顺序进行
pipeline_stages:
- compile
- verification
- delivery
该配置表示:首先并行执行编译阶段,接着并行执行验证阶段,最后并行执行交付阶段。任一阶段失败将导致整体状态失败。
7.预处理与后处理阶段
.pre阶段作为管道首个执行单元,.post阶段作为最后一个执行单元。用户定义阶段位于两者之间。顺序不可更改。若仅包含预处理或后处理阶段,管道不会创建。

8.阶段关联配置
通过stage字段关联任务到特定阶段,依赖全局阶段定义。同阶段任务可并行执行
unit_tests:
stage: verification
command:
- execute_tests
api_checks:
stage: verification
command:
- run_api_tests

可能遇到的问题:阶段未并行执行。需调整runner并发数。默认值为1,建议修改为10
vim /etc/gitlab-runner/config.toml 修改后自动生效
concurrent = 10
9.变量配置
定义不同层级变量:管道变量、任务变量、Runner变量。任务变量优先级最高
综合示例
pre_tasks: #任务前执行指令
- echo "初始化操作"
env_vars: #环境变量定义
APP_DOMAIN: example.org
pipeline_stages: #执行顺序定义
- build
- test
- scan
- deploy
build_job:
pre_tasks: #任务前执行指令
- echo "构建前操作"
stage: build #根据阶段定义优先执行
command:
- echo "编译项目"
- echo "构建应用"
- echo "$APP_DOMAIN"
post_tasks: #任务后执行指令
- echo "构建后处理"
test_job:
stage: test
command:
- echo "运行测试"
deploy_job:
stage: deploy
command:
- echo "部署应用"
- sleep 2;
scan_job:
stage: scan
command:
- echo "代码扫描"
- sleep 5;
post_tasks: #任务后执行指令
- echo "全局清理"


