GitLab CI/CD 新手入门:一份详细的图文教程
持续集成/持续部署(CI/CD)是现代软件开发的核心实践。它能够自动化代码的构建、测试和部署流程,从而提高开发效率、保证代码质量并加快交付速度。GitLab 作为一个一体化的 DevOps 平台,提供了强大且易于上手的 CI/CD 功能。
本教程将通过图文并茂的方式,带你从零开始,一步步学习如何为你的项目配置和使用 GitLab CI/CD。
1. 核心概念
在开始之前,我们先了解几个 GitLab CI/CD 的核心概念:
- Pipeline(流水线): 一次 CI/CD 的完整执行过程,包含了从构建、测试到部署等一系列任务。当你向仓库推送(push)代码时,通常会触发一条新的流水线。
- Stage(阶段): 流水线可以分为多个阶段,例如
build(构建)、test(测试)、deploy(部署)。同一阶段的 Job 可以并行执行,所有 Job 都成功后,流水线才会进入下一阶段。 - Job(任务): 阶段中的具体任务,例如编译代码、运行单元测试等。Job 是 CI/CD 流程中的最小执行单元。
- Runner(执行器): 真正执行 Job 的代理程序。Runner 可以是安装在你自己的服务器、虚拟机或 Docker 容器中的。GitLab.com 也提供了共享的 Runner (Shared Runners),方便你立即开始。
- .gitlab-ci.yml: 这是 GitLab CI/CD 的配置文件,位于项目的根目录下。你可以在这个 YAML 文件中定义流水线的 Stages 和 Jobs,以及它们具体的执行逻辑。
它们的关系如下图所示:
+----------------------------------------------------------------+
| Pipeline (整个流水线) |
| |
| +---------------------+ +---------------------+ +---------+
| | Stage: build | | Stage: test | | Stage: ...
| | |-->| |-->|
| | +---------------+ | | +---------------+ | |
| | | Job: compile | | | | Job: unit-test| | |
| | +---------------+ | | +---------------+ | |
| +---------------------+ +---------------------+ +---------+
| |
+----------------------------------------------------------------+
2. 准备工作
要学习本教程,你只需要:
- 一个 GitLab 账号。
- 在 GitLab 上创建一个空的项目。
让我们开始吧!
首先,登录 GitLab 并创建一个新项目。点击 “New project” -> “Create blank project”。
[图片: GitLab 创建新项目的页面]
描述:GitLab 页面,用户填写项目名称(例如 “My CI/CD Demo”),选择可见性级别,然后点击 “Create project” 按钮。
创建完成后,将项目克隆到你的本地电脑。
“`bash
请替换成你自己的项目 URL
git clone https://gitlab.com/your-username/my-ci-cd-demo.git
cd my-ci-cd-demo
“`
3. 你的第一个 CI/CD 流水线
我们的第一个目标是创建一个最简单的流水线,它只包含两个任务,分别打印一条欢迎信息。
第一步:创建 .gitlab-ci.yml 文件
在项目的根目录 (my-ci-cd-demo) 中,创建一个名为 .gitlab-ci.yml 的文件,并填入以下内容:
“`yaml
.gitlab-ci.yml
定义流水线的阶段
stages:
– build
– test
第一个 Job,属于 build 阶段
build_job:
stage: build
script:
– echo “Hello, this is the build stage!”
– echo “Compiling the code…”
– echo “Build successful.”
第二个 Job,属于 test 阶段
test_job:
stage: test
script:
– echo “Hello, this is the test stage!”
– echo “Running unit tests…”
– echo “Tests passed.”
“`
代码解释:
stages: 定义了这条流水线包含build和test两个阶段,它们将按顺序执行。build_job和test_job: 这是我们定义的两个任务。stage: 指定了每个任务所属的阶段。script: 这是任务的核心,定义了 Runner需要执行的 shell 命令。echo命令用于在控制台打印文本。
第二步:提交并推送代码
现在,将这个新文件提交到你的 GitLab 仓库。
bash
git add .gitlab-ci.yml
git commit -m "Add basic .gitlab-ci.yml for CI/CD"
git push
第三步:查看流水线
代码推送成功后,GitLab 会自动检测到 .gitlab-ci.yml 文件并触发一条新的流水线。
回到你的 GitLab 项目页面,在左侧导航栏找到 CI/CD -> Pipelines。
[图片: GitLab CI/CD 流水线列表页面]
描述:页面显示一个流水线正在运行或已完成。状态图标(如“running”或“passed”)清晰可见,旁边是提交信息、触发者和流水线ID。
你会看到一条状态为 running 或 passed 的流水线。点击这条流水线,可以查看其详细信息。
[图片: GitLab 流水线详情页]
描述:页面展示了
build和test两个阶段。build阶段的build_job已经成功(绿色对勾),test阶段的test_job正在运行。
你可以点击任何一个 Job(例如 build_job)来查看它的执行日志。
[图片: GitLab Job 日志输出页面]
描述:一个黑色背景的控制台窗口,显示了
script中定义的echo命令及其输出内容,例如 “Hello, this is the build stage!”。
恭喜你!你已经成功运行了第一条 GitLab CI/CD 流水线。
4. 构建一个真实的 Python 项目
现在,让我们来做一个更实际的例子:自动化构建和测试一个简单的 Python 项目。
第一步:创建 Python 项目文件
在你的本地项目中,创建以下文件:
-
app.py:
“`python
def add(a, b):
return a + bdef subtract(a, b):
return a – b
“` -
test_app.py:
“`python
import pytest
from app import add, subtractdef test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0def test_subtract():
assert subtract(5, 3) == 2
“` -
requirements.txt:
pytest
这个项目非常简单,app.py 包含业务逻辑,test_app.py 是对应的单元测试,requirements.txt 定义了项目依赖。
第二步:更新 .gitlab-ci.yml
我们需要修改 .gitlab-ci.yml 来安装依赖、运行测试。
“`yaml
.gitlab-ci.yml
使用官方的 Python 3.9 镜像
image: python:3.9
在所有 Job 开始前执行的命令,用于安装依赖
before_script:
– pip install -r requirements.txt
定义阶段
stages:
– test
定义测试任务
run_tests:
stage: test
script:
– echo “Running Python tests…”
– pytest test_app.py
“`
代码解释:
image: python:3.9: 这条指令告诉 GitLab Runner 使用一个预装了 Python 3.9 的 Docker 镜像来执行 Job。这样我们就不需要在 Runner 上手动安装 Python 环境。before_script: 在每个 Job 的script执行之前,会先执行before_script中的命令。我们在这里使用pip安装项目依赖,这样run_tests任务就可以直接使用pytest命令了。run_tests: 这个 Job 负责执行pytest命令来运行我们的单元测试。
第三步:提交并查看结果
将所有新文件和修改后的 .gitlab-ci.yml 推送到 GitLab。
bash
git add app.py test_app.py requirements.txt .gitlab-ci.yml
git commit -m "Add python app and configure CI to run tests"
git push
再次访问 CI/CD -> Pipelines 页面。新的流水线会被触发。点击进入 run_tests 任务,你将看到 pytest 的输出结果,显示所有测试都已通过。
[图片: pytest 测试通过的 Job 日志]
描述:Job 日志中显示
pytest的执行过程和最终的 “== 100% PASSED ==” 成功信息。
5. 总结与后续
通过本教程,你学习了 GitLab CI/CD 的基本概念,并亲手创建了两条流水线:一条是简单的入门示例,另一条是自动化测试真实 Python 项目的实用案例。
这仅仅是 GitLab CI/CD 功能的冰山一角。接下来,你可以继续探索:
- 环境变量 (Variables): 用于存储敏感信息(如 API 密钥)或配置信息。
- 缓存 (Cache): 缓存下载的依赖,加快后续流水线的执行速度。
- 制品 (Artifacts): 在不同 Stage 的 Job 之间传递文件(例如,将 build 阶段编译好的文件传递给 deploy 阶段)。
- 部署 (Deployment): 将你的应用自动部署到服务器或云平台。
希望这篇教程能帮助你迈出 DevOps 的第一步。现在,就去为你的项目添加 .gitlab-ci.yml,享受自动化带来的便利吧!