第五篇:《GitLab CI 从零搭建:Runner 配置与 .gitlab-ci.yml 入门》
2026/7/14 9:17:47 网站建设 项目流程

如果你已经在使用 GitLab 管理代码,那么 GitLab CI/CD 是最自然的选择——它内置在 GitLab 中,无需额外部署 Jenkins 服务器。本章从零开始介绍 GitLab CI/CD 的核心概念:Pipeline、Job、Stage、Runner,以及 .gitlab-ci.yml 的语法。通过一个完整的示例,你将学会如何用 YAML 文件定义 CI/CD 流水线。

一、GitLab CI/CD 核心概念
GitLab CI/CD 是 GitLab 内置的持续集成与持续交付功能,与代码仓库无缝集成。

核心规则:

同一个 Stage 中的 Job 并行执行

只有当前 Stage 的所有 Job 都成功后,才会进入下一个 Stage

任何一个 Job 失败,Pipeline 立即停止(除非配置了 allow_failure: true)

二、GitLab Runner:CI/CD 的执行引擎
Runner 是 GitLab CI/CD 的执行器,负责运行 Pipeline 中的 Job。

2.1 安装 GitLab Runner(Linux)

# 下载 GitLab Runner 二进制文件curl-L--output/usr/local/bin/gitlab-runner\https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64sudochmod+x /usr/local/bin/gitlab-runner# 创建 gitlab-runner 用户并启动服务sudouseradd--comment'GitLab Runner'--create-home gitlab-runner--shell/bin/bashsudogitlab-runnerinstall--user=gitlab-runner --working-directory=/home/gitlab-runnersudogitlab-runner start

2.2 注册 Runner

sudogitlab-runner register

按提示输入:

GitLab 实例 URL:如 https://gitlab.com 或自托管地址

注册 Token:在项目 → Settings → CI/CD → Runners 中获取

描述:如 docker-runner

标签:如 docker(用于在 .gitlab-ci.yml 中指定 Runner)

执行器:选择 docker(最常用)或 shell

2.3 使用 Docker 执行器(推荐)
选择 docker 执行器后,每个 Job 会在一个新的 Docker 容器中运行,保证环境隔离和一致性。

注册时设置默认镜像:

text
Please enter the default Docker image: alpine:latest
2.4 配置 Runner 使用 Docker-in-Docker(DinD)
如果 Job 需要构建 Docker 镜像,需要配置 Runner 支持 Docker-in-Docker。

编辑 /etc/gitlab-runner/config.toml:

toml
[[runners]]
executor = “docker”
[runners.docker]
image = “alpine:latest”
privileged = false
volumes = [
“/var/run/docker.sock:/var/run/docker.sock”,
“/cache”
]
⚠️ 注意:使用 privileged = false 更安全。如果无法使用 Docker-in-Docker,可以挂载宿主机的 Docker socket。

三、.gitlab-ci.yml:声明式流水线定义
GitLab CI/CD 的流水线通过项目根目录下的 .gitlab-ci.yml 文件定义。这是一个 YAML 文件,GitLab 在每次代码推送时自动解析并执行。

3.1 最简示例

# 定义 Stages(按顺序执行)stages:-build-test-deploy# 每个 Job 属于一个 Stagebuild-job:stage:buildscript:-echo "正在编译代码..."-mvn clean compiletest-job:stage:testscript:-echo "正在运行测试..."-mvn testdeploy-job:stage:deployscript:-echo "正在部署到生产环境..."-scp target/*.jaruser@server:/app/

3.2 一个更完整的示例

# 定义变量variables:MAVEN_OPTS:"-Dmaven.repo.local=.m2/repository"DOCKER_REGISTRY:"registry.gitlab.com"IMAGE_TAG:"$CI_COMMIT_SHORT_SHA"# 定义 Stagesstages:-build-test-package-deploy# 缓存 Maven 依赖,加速后续构建cache:paths:-.m2/repository/# 使用 Docker 镜像作为执行环境image:maven:3.8.4-openjdk-17# Build Jobbuild:stage:buildscript:-mvn clean compileartifacts:paths:-target/classes/# Test Job(并行执行)test:unit:stage:testscript:-mvn testartifacts:reports:junit:target/surefire-reports/*.xmltest:integration:stage:testscript:-mvn verify-Pintegration-testallow_failure:true# 集成测试失败不阻断 Pipeline# Package Job(打包并构建镜像)package:stage:packageimage:docker:latestservices:-docker:dindscript:-docker build-t $DOCKER_REGISTRY/$CI_PROJECT_PATH:$IMAGE_TAG .-docker push $DOCKER_REGISTRY/$CI_PROJECT_PATH:$IMAGE_TAGonly:-main# Deploy Job(仅 main 分支触发)deploy:stage:deployscript:-echo "部署 $IMAGE_TAG 到生产环境..."environment:name:productionurl:https://myapp.example.comonly:-mainwhen:manual# 需要手动触发

四、核心语法详解
4.1 stages:定义阶段顺序
stages 定义了 Pipeline 的执行顺序:

stages:-build-test-deploy

未指定 stage 的 Job 默认属于 test 阶段。

4.2 script:执行命令
script 是 Job 的核心,包含要执行的 Shell 命令:

job:script:-echo "Hello"-mvn clean package

4.3 before_script 与 after_script
在所有 Job 之前/之后执行的通用脚本:

before_script:-echo "开始执行 Pipeline..."-apt-get update-qqafter_script:-echo "Pipeline 执行结束"-rm-rf /tmp/*

4.4 cache 与 artifacts

cache:paths:-.m2/repository/artifacts:paths:-target/*.jarexpire_in:1 week

4.5 only / except:控制触发条件

# 仅在 main 分支触发job:only:-main# 仅在 Tag 触发job:only:-tags

4.6 when:控制执行时机

yaml
deploy:
when: manual
4.7 environment:部署环境管理

deploy:environment:name:productionurl:https://myapp.example.com

GitLab 会记录每次部署到该环境的历史版本,支持一键回滚。

五、在 GitLab UI 中查看 Pipeline
代码推送后,Pipeline 会自动触发。在 GitLab 项目中:

点击左侧菜单 CI/CD → Pipelines

查看 Pipeline 列表及其状态(passed、failed、running、pending)

点击 Pipeline ID 查看详细 Stages 和 Jobs

点击 Job 名称查看实时日志

六、GitLab CI vs Jenkins:核心差异

七、小结
GitLab CI/CD 将代码仓库与 CI/CD 流水线融为一体,通过简洁的 YAML 语法定义构建、测试、部署流程。Runner 是执行引擎,支持 Docker、Shell、Kubernetes 等多种执行器。对于已经在使用 GitLab 的团队,GitLab CI 是最自然、最低门槛的选择。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询