在上一篇教程中,我们探讨了如何在 CI/CD 环境中进行自动化 UI 测试。本篇教程将专注于构建和发布过程中的“构建镜像”部分。具体来说,我们将学习如何使用 Docker 构建镜像,为后续的测试和部署做好准备。
了解构建镜像
在 CI/CD 流程中,构建镜像是将应用程序及其所有依赖项打包为一个轻量级、可移植的容器的过程。通过构建镜像,我们能够确保代码在不同环境中的一致性,简化了开发、测试和生产环境之间的过渡。
重要概念
- Dockerfile:定义了如何构建镜像的文本文件,包括基础镜像、环境变量、所需软件的安装以及应用代码的复制。
- 镜像(Image):在 Docker 中,一个镜像是一个独立的、具有应用程序和其依赖项的打包文件。
- 容器(Container):通过镜像创建的一个运行实例,是在一个封闭的环境中运行应用程序。
构建镜像的步骤
下面将通过一个 Node.js 应用程序的例子,演示如何创建和构建 Docker 镜像。
1. 准备代码
假设我们有一个简单的 Node.js 应用程序,代码结构如下:
1 2 3 4 5
| my-node-app/ │ ├── Dockerfile ├── package.json └── app.js
|
package.json
内容如下:
1 2 3 4 5 6 7 8 9 10 11
| { "name": "my-node-app", "version": "1.0.0", "main": "app.js", "scripts": { "start": "node app.js" }, "dependencies": { "express": "^4.17.1" } }
|
app.js
内容如下:
1 2 3 4 5 6 7 8 9 10 11
| const express = require('express'); const app = express(); const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => { res.send('Hello, World!'); });
app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); });
|
2. 创建 Dockerfile
在项目根目录下创建一个名为 Dockerfile
的文件,定义镜像的构建过程。以下是一个示例 Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
|
3. 构建 Docker 镜像
在终端中,切换到项目目录并运行以下命令构建 Docker 镜像:
1
| docker build -t my-node-app .
|
命令说明:
docker build
:构建镜像的命令。
-t my-node-app
:为镜像指定一个名称(my-node-app),可选地还可以指定标签。
.
:表示Dockerfile在当前目录下。
如果一切正常,你应该会看到一系列构建步骤的输出,最后生成新镜像。
4. 验证构建的镜像
要确保镜像构建成功,可以运行以下命令查看本地镜像列表:
你应该看到名为 my-node-app
的镜像。
5. 运行容器以验证
使用以下命令运行一个容器实例并验证它是否正常工作:
1
| docker run -p 3000:3000 my-node-app
|
命令说明:
-p 3000:3000
:将容器的 3000 端口映射到主机的 3000 端口。
my-node-app
:要运行的镜像名称。
在浏览器中访问 http://localhost:3000
,你应该看到“Hello, World!”的消息。
整合到 CI/CD 管道中
接下来,我们需要将这一过程集成到 CI/CD 管道中。常见的 CI/CD 工具,如 Jenkins、GitHub Actions 或 GitLab CI,都支持在构建阶段使用 Docker。
以 GitHub Actions 为例,以下是一个简单的工作流程,当代码推送到主分支时,它会自动构建 Docker 镜像:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| name: CI/CD Pipeline
on: push: branches: - main
jobs: build: runs-on: ubuntu-latest
steps: - name: Checkout code uses: actions/checkout@v2
- name: Set up Docker Buildx uses: docker/setup-buildx-action@v1
- name: Build Docker image run: | docker build -t my-node-app .
- name: Push Docker image run: | echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin docker push my-node-app
|
在这个例子中,我们通过 GitHub Actions 在代码推送到主分支时自动构建 Docker 镜像并推送到 Docker Hub。
总结
在本篇教程中,我们学习了如何构建 Docker 镜像,并将其集成到 CI/CD 流程中。构建镜像是应用程序发布的关键步骤,为后续的部署和测试提供了基础。
在下一篇教程中,我们将探讨如何将构建好的镜像部署到测试环境中,进一步推动 CI/CD 流程的自动化。请继续关注!