持续集成和持续部署(CI/CD)是现代软件开发中的关键实践,使团队能够快速交付可靠的可扩展应用程序。GitHub Actions 提供了一种强大的集成工具,可以直接在 GitHub 仓库内自动化工作流,而 Docker 则确保环境一致且可重复。
在这篇文章里,我们将教你如何使用GitHub Actions和Docker实现CI/CD持续集成和持续交付流水线。我们将从基础开始,创建一个使用Docker的应用程序,并配置GitHub Actions以自动化构建、测试和部署流程。
《了解 CI/CD、GitHub Actions 以及 Docker》 什么是CI/CD?- 持续集成 (CI): 自动化每次代码提交的构建和测试,以便尽早发现问题并解决。
- 持续部署 (CD): 自动部署经过测试的代码变更到生产环境,确保更快的交付。
GitHub Actions 是一个集成到 GitHub 的 CI/CD 平台,它允许你用 YAML 文件定义工作流。主要功能有:
- 由事件驱动的自动化(例如,由
push
或pull_request
事件触发)。 - 支持可重用的工作流程。
- 支持与 Docker 以及其他第三方工具的集成。
Docker 通过容器化技术,可以创建出隔离且可重复的应用程序运行环境。通过在 Dockerfile
中定义应用程序的运行环境,这样可以确保应用程序在本地和生产环境中的行为保持一致。
- 首先,创建或克隆一个GitHub仓库。
- 然后,用你的应用程序代码库初始化仓库。
- 在你的仓库内创建一个文件夹
.github/workflows/
。 - 在该文件夹内添加一个名为
ci-cd.yml
的文件。
示例工作流定义:
name: CI/CD 流水线
on:
push:
branches:
- main
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: 拉取代码
uses: actions/checkout@v3
- name: 安装 Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: 安装依赖
run: npm install
- name: 运行测试
run: npm test
- 这个示例工作流会在每次有人将更改推送到
main
分支时拉取代码、安装依赖项并运行测试。
在根目录下创建一个 Dockerfile
,以便将你的应用容器化。
- 例如一个
Dockerfile
示例(一个示例):
# 使用 Node.js 的 16 版本作为基础镜像
FROM node:16
# 设定工作目录为 /app
WORKDIR /app
# 复制包文件并安装依赖项
COPY package*.json ./
RUN npm install
# 复制其余应用代码
COPY . .
# 暴露端口 3000
EXPOSE 3000
# 默认运行命令
CMD ["npm", "start"]
本地测试:Docker镜像文件
- 开始构建 Docker 图像:
docker build -t my-app . # 构建一个名为 my-app 的 Docker 镜像,使用当前目录的 Dockerfile
- 运行 Docker 容器,使用
docker run
命令运行容器。
docker run -p 3000:3000 my-app
这行命令将会运行一个容器,将主机的3000端口映射到容器的3000端口,并启动一个名为my-app的应用程序。
将 Docker 和 GitHub Actions 整合在一起 修改Docker的工作流程修改 ci-cd.yml
文件以构建并测试该 Docker 镜像:
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: 拉取代码
uses: actions/checkout@v3
- name: 构建Docker图像
run: docker build -t my-app .
- name: 运行容器中的测试
run: docker run my-app npm test
将Docker镜像推送到仓库。
添加将镜像上传到Docker Hub的步骤:
- name: 登录 Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: 上传 Docker 镜像
run: |
将 my-app 打标签为 my-dockerhub-username/my-app:latest
推送 my-dockerhub-username/my-app:latest 到仓库
- 将
my-dockerhub-username
替换为你的 Docker Hub 用户名(或昵称)。
要运行 Docker 包装的应用程序,你可以这样做:
- 使用 Docker Compose 来搭建本地环境。
- 部署到 Kubernetes、AWS ECS 或 Azure Container Instances。
对于简单的Docker主机部署:
- 下载 Docker 镜像:
docker pull my-dockerhub-username/my-app:latest
这命令是用来从Docker Hub拉取最新版本的应用程序。
- 运行容器实例。
docker run -d -p 80:3000 你的 Docker Hub 用户名/my-app:latest # 运行一个新的 Docker 容器,并将主机的 80 端口映射到容器内的 3000 端口。# 拉取最新的镜像版本
使用 GitHub Actions 和 Docker 的好处
- 自动化简化: GitHub Actions 自动化测试和部署,节省时间,
- 环境一致性: Docker 确保本地和生产系统之间环境保持一致,
- 支持无缝扩展性: 支持现代云原生应用的无缝扩展,
CI/CD 流水线对于高效和可靠的软件交付来说非常重要。结合 GitHub Actions 和 Docker 可以简化自动化和环境管理,确保工作流程的一致性和可重复性。通过遵循本指南中的步骤,您可以为您的项目搭建一个稳健的 CI/CD 流水线。
从今天就开始尝试吧,探索像 Kubernetes 这样的高级集成技术,或多阶段工作流程,让你的自动化达到一个新的高度!
共同学习,写下你的评论
评论加载中...
作者其他优质文章