7.3 CI/CD实训一

一、准备工作:迁移与激活
在开启自动化构建前,我们首先要做好准备工作。这包括将别人的项目“搬”到我们自己的地盘,并在自动化工具中“激活”它。
1. 迁移 Gitea 项目
在团队协作中,我们常常需要在现有项目的基础上进行二次开发。第一步,就是将项目迁移到自己的代码仓库,这样可以自由修改,而不用担心影响到原始项目。
现在,打开你的 Gitea 平台,将 https://git.seahi.me/docker/pacman 这个项目迁移到你自己的账户下。
2. 在 Drone 中激活项目
项目迁移完成后,我们需要告诉持续集成工具 Drone 开始关注这个项目,这样,每当代码有更新,Drone 就能自动开始构建。
- 打开 Drone 平台。
- 在项目列表中找到你刚刚迁移的
pacman项目。 - 点击 ACTIVATE (激活) 按钮。
pacman 项目,别担心。点击页面右上角的 SYNC (同步) 按钮,Drone 就会从 Gitea 重新获取你的项目列表。二、克隆项目到本地
要在本地修改代码,我们得先把它从 Gitea 服务器上下载下来。这个过程叫做“克隆 (Clone)”。这里我们使用图形化 Git 工具 Sublime Merge 来完成操作。
- 在 Gitea 的
pacman项目页面,复制项目的 URL 地址。 - 打开 Sublime Merge,在 Source URL (源地址) 栏中粘贴你复制的 URL。


克隆完成后,Sublime Merge 会自动打开这个项目,你可以清晰地看到项目的每一次提交记录、所有分支等信息。

三、为项目添加 Docker 支持
现在,代码已经在你的本地电脑上了。这个原始的 pacman 项目是一个纯前端游戏,我们的任务是让它“容器化”,也就是为它添加 Docker 支持。
1. 在 Sublime Text 中打开项目
在 Sublime Text 编辑器中,选择 File > Open Folder,然后找到并打开刚才克隆的 pacman 项目文件夹。
2. 创建 Dockerfile 文件
Dockerfile 告诉 Docker 如何一步步地构建我们的应用镜像。在项目根目录创建一个名为 Dockerfile 的文件。

3. 提交并推送代码
创建好 Dockerfile 后,我们需要将这个改动上传回 Gitea 服务器。在 Sublime Merge 中,遵循 Git 的标准三步曲:
- Stage (暂存):在
Unstaged Files区域,点击Dockerfile文件旁的 Stage 按钮,表示“我准备提交这个文件的改动”。 - Commit (提交):在下方的提交信息框中,填写本次修改的说明,比如“feat: 添加 Dockerfile”,然后点击 Commit 按钮。
- Push (推送):点击工具栏上的 Push 按钮,将本地的提交上传到 Gitea 服务器。
四、配置 Drone 自动化构建
现在,让我们回到 Gitea 和 Drone 的网页,你会发现推送代码后,Drone 并没有像我们预期的那样开始工作。这是因为它缺少一份“行动指南”——.drone.yml 配置文件。
1. 创建 .drone.yml 文件
在你的项目根目录(与 Dockerfile 同级)创建一个名为 .drone.yml 的文件。注意,文件名以一个点 . 开头。然后,将以下内容复制进去:
kind: pipeline # 定义这是一个流水线任务
type: docker # 指定在 Docker 环境中执行
name: build # 给这条流水线起个名字,比如 'build'
steps: # 定义具体的构建步骤
# 步骤 1: 构建 Docker 镜像
- name: 构建镜像
image: plugins/docker # 使用官方提供的 Docker 插件
settings:
dockerfile: Dockerfile # 指定 Dockerfile 的位置
repo: stu/pacman # 定义镜像的仓库名和名称
tags: latest # 为镜像打上 'latest' 标签
# 开启 dry_run (演习) 模式,只构建,不推送到镜像仓库
dry_run: true
kind: pipeline: 定义这是一个流水线配置。type: docker: 表示每个步骤都在一个临时的 Docker 容器中执行。steps: 这里是构建的核心,可以包含一个或多个步骤,它们会按顺序执行。image: plugins/docker: 这是 Drone 社区提供的插件,专门用来构建和推送 Docker 镜像。settings: 针对这个插件的详细设置。dry_run: true: 这是一个非常有用的“演习”模式。它会完整地执行构建过程,但不会在最后将镜像推送到仓库。这在调试配置文件时非常方便。
2. 提交并上传配置文件
和之前一样,使用 Sublime Merge 将新创建的 .drone.yml 文件通过 Stage、Commit、Push三步曲上传到 Gitea。
3. 解决网络问题并最终成功
当你把 .drone.yml 推送上去后,Drone 会立刻开始构建。但你很可能会看到一个红色的失败标志。

为什么会失败呢?
这是因为 Drone 在构建时,需要从网上下载基础镜像,但它无法使用我们为宿主机配置的国内镜像加速器 (Registry Mirror)。为了解决这个问题,我们需要在 .drone.yml 中明确告诉 Drone 使用哪个加速器。
修改 .drone.yml 文件,添加 mirror 配置:
kind: pipeline
type: docker
name: build
steps:
- name: 构建镜像
image: plugins/docker
settings:
dockerfile: Dockerfile
repo: stu/pacman
tags: latest
mirror: https://docker.seahi.me # 指定使用国内镜像加速器
dry_run: true
再次提交并推送修改后的 .drone.yml 文件。这次,Drone 会再次自动触发构建,稍等片刻,你就会看到一个绿色的成功标志!

至此,你已经成功搭建了一个基础的 CI (持续集成) 流程!每当你向 Gitea 推送新的代码,Drone 都会自动为你构建 Docker 镜像。


