Gitlab CI工作流配置指南
.gitlab-ci.yml 是 GitLab CI/CD 的核心配置文件,用于定义持续集成和持续部署的自动化流程。本文将详细介绍该文件的配置方法和关键概念。
基本概念
.gitlab-ci.yml 是一个 YAML 格式的文件,必须放在项目仓库的根目录下。它定义了 CI/CD 流水线中的各个作业(jobs)及其执行方式。3
GitLab 从 7.12 版本开始使用这种方式管理 CI/CD 配置,当 GitLab 检测到仓库中存在该文件时,会使用 GitLab Runner 按照配置执行相应的任务。4
基本结构
一个典型的 .gitlab-ci.yml 文件结构如下:
# 定义全局变量
variables:
VARIABLE_NAME: "value"
# 定义流水线阶段
stages:
- build
- test
- deploy
# 定义作业
job_name:
stage: build
script:
- echo "Building the app"
- npm install
- npm run build
默认情况下,流水线包含 build、test 和 deploy 三个阶段,未被使用的阶段会被自动忽略。2
关键组件详解
1. stages(阶段)
stages 定义了流水线中的各个阶段,这些阶段将按照定义的顺序依次执行:
stages:
- build # 第一阶段:构建
- test # 第二阶段:测试
- deploy # 第三阶段:部署
- cleanup # 第四阶段:清理
同一阶段的作业会并行执行,只有当前阶段的所有作业都成功完成后,才会进入下一个阶段。1
2. jobs(作业)
作业是 CI/CD 流水线中的基本单元,定义了具体的任务:
build_job: # 作业名称
stage: build # 所属阶段
script: # 执行的脚本命令
- echo "Building the application..."
- make build
tags: # 指定运行器标 签
- docker
only: # 触发条件
- main
artifacts: # 构建产物
paths:
- build/
expire_in: 1 week
每个作业必须包含 script 部分,定义要执行的命令。2
3. script(脚本)
script 是作业中最关键的部分,定义了要执行的 shell 命令:
test_job:
script:
- echo "Running tests..."
- npm test
- ./run_integration_tests.sh
这些命令会在 GitLab Runner 中按顺序执行,任何命令返回非零退出码都会导致作业失败。1
4. before_script 和 after_script
这两个指令分别在作业的主脚本之前和之后执行:
default:
before_script:
- echo "This runs before all jobs"
job:
before_script:
- echo "This overrides the default"
script:
- echo "Main script"
after_script:
- echo "This runs after the job"
before_script 可以用于准备环境,after_script 则常用于清理工作。4
5. variables(变量)
变量可以在全局或作业级别定义,用于存储配置信息:
variables:
GLOBAL_VAR: "global value"
job:
variables:
JOB_VAR: "job specific value"
script:
- echo $GLOBAL_VAR
- echo $JOB_VAR
GitLab 还提供了许多预定义变量,如 CI_COMMIT_SHA、CI_JOB_ID 等。2
6. only/except 和 rules(触发条件)
这些指令控制何时触发作业:
# 旧语法
job:
only:
- main
- /^release-.*$/
except:
- develop
# 新语法(更灵活)
job:
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: always
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual
- when: never