GitLab CI/CD 新手入门:一份详细的图文教程 – wiki基地


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. 准备工作

要学习本教程,你只需要:

  1. 一个 GitLab 账号。
  2. 在 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: 定义了这条流水线包含 buildtest 两个阶段,它们将按顺序执行。
  • build_jobtest_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。

你会看到一条状态为 runningpassed 的流水线。点击这条流水线,可以查看其详细信息。

[图片: GitLab 流水线详情页]

描述:页面展示了 buildtest 两个阶段。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 项目文件

在你的本地项目中,创建以下文件:

  1. app.py:
    “`python
    def add(a, b):
    return a + b

    def subtract(a, b):
    return a – b
    “`

  2. test_app.py:
    “`python
    import pytest
    from app import add, subtract

    def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

    def test_subtract():
    assert subtract(5, 3) == 2
    “`

  3. 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,享受自动化带来的便利吧!

滚动至顶部