问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

提升你的CI/CD流水线:使用GitHub Actions自动化 Docker

创作时间:
作者:
@小白创作中心

提升你的CI/CD流水线:使用GitHub Actions自动化 Docker

引用
1
来源
1.
https://cloud.tencent.com/developer/article/2502054

在当今的软件开发中,持续集成和持续部署(CI/CD)已成为提高开发效率和代码质量的关键实践。而Docker作为容器化技术的代表,更是让应用的部署和运行变得简单高效。本文将详细介绍如何使用GitHub Actions自动化Docker工作流程,帮助你实现更快、更可靠的部署。

如何为 Docker 设置 GitHub Actions

让我们直接进入设置 GitHub Actions。你需要做的第一件事是创建一个工作流程文件。它是一个简单的 YAML 文件,位于你的 repo 的 .github/workflows/ 目录下。

步骤 1:创建工作流程文件

  1. 转到你的 repo。
  2. 创建一个名为 .github 的文件夹(如果它尚不存在)。
  3. 在其中创建一个名为 workflows 的文件夹。
  4. .github/workflows/ 中创建一个名为 docker.yml(或任何你喜欢的名称)的文件。

这是你的 docker.yml 文件的基本结构:

name: Docker Workflow

on:
  push:
    branches:
- main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
- name: Check out code
        uses: actions/checkout@v2

- name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

- name: Build Docker Image
        run: docker build -t myapp:${{ github.sha }} .

- name: Push Docker Image
        run: |
          echo ${{ secrets.DOCKER_PASSWORD }} | docker login --username ${{ secrets.DOCKER_USERNAME }} --password-stdin
          docker push myapp:${{ github.sha }}

上面的 YAML 文件会自动构建。此外,每当更改被移动到 main 分支时,它都会推送你的 Docker 镜像。

自托管与 GitHub 托管的 Runners

有两种选择可用于执行你的工作流程:

  • GitHub 托管的 runners 是默认选项。设置相对免维护,并且对你来说很方便。
  • 使用自托管的 runners,用户可以完全控制工作流程执行机器。虽然此方法提供了更高的灵活性,但它需要持续维护。

对于大多数用户来说,GitHub 托管的 runners 将是首选解决方案。因为它们最适合 Docker 构建。

自动化 Docker 镜像构建

假设你已经推送了一些新代码。现在,你想自动化构建你的 Docker 镜像。你可以这样做。

步骤 2:自动构建 Docker 镜像

你将在GitHub Actions 工作流程文件中使用 docker build 命令来自动构建你的 Docker 镜像。

例如,在你的 docker.yml 文件中:

- name: Build Docker image
  run: docker build -t myapp:${{ github.sha }} .

上述命令将创建一个 Docker 镜像,并使用 commit SHA (${{ github.sha }}) 对其进行标记。它确保每个镜像都使用 commit ID 唯一标记。

步骤 3:动态标记 Docker 镜像

你可能希望以有意义的方式标记你的镜像。例如,按分支名称,或者使用版本标签。你可以使用 GitHub Actions 变量来做到这一点:

- name: Build and tag Docker image
  run: docker build -t myapp:${{ github.sha }} -t myapp:${{ github.ref }} .

在这个例子中:

  • ${{ github.sha }} 使用唯一的 commit 哈希标记镜像。
  • ${{ github.ref }} 使用分支名称(例如,refs/heads/main)标记它。 它可以使你的镜像易于跟踪和识别。

推送到 Docker Hub 或 GHCR

现在你已经构建了镜像,下一步是将其推送到容器注册表,例如Docker Hub 或 GitHub Container Registry (GHCR)。

步骤 4:设置安全身份验证

首先,你需要验证 Docker 才能推送镜像。由于你不想直接在 YAML 文件中暴露你的凭据,因此 GitHub Secrets 是你的好帮手。

转到你的 GitHub repo 的 Settings > Secrets 并添加两个 secrets:

  • DOCKER_USERNAME
  • DOCKER_PASSWORD

然后,在你的工作流程文件中,你将使用这些 secrets 登录到你的 Docker:

- name: Log in to Docker Hub
  run: |
    echo ${{ secrets.DOCKER_PASSWORD }} | docker login --username ${{ secrets.DOCKER_USERNAME }} --password-stdin

步骤 5:将镜像推送到 Docker Hub 或 GHCR

最后,登录后,推送你的 Docker 镜像:

- name: Push Docker image to Docker Hub
  run: docker push myapp:${{ github.sha }}

YAML 代码将你的镜像推送到 Docker Hub。此外,如果这是你的选择,你可以将其换成 GHCR。

使用 QEMU 和 Buildx 进行多架构构建

你现有的工作流程必须支持多种机器架构,例如 ARM 和 x86。它允许启动从 Raspberry Pi (基于 ARM) 设备到基于云的服务器 (基于 x86) 的硬件操作。在此阶段,QEMU+Buildx 在GitHub Actions 内部的组合非常方便。

步骤 6:设置多架构构建

首先,你必须在你的工作流程文件中设置 QEMU 和 Buildx。以下是它的样子:

- name: Set up QEMU
  uses: docker/setup-qemu-action@v2

- name: Set up Buildx
  uses: docker/setup-buildx-action@v1

- name: Build multi-arch Docker image
  run: |
    docker buildx build --platform linux/amd64,linux/arm64 -t myapp:${{ github.sha }} .

这将为 amd64(标准桌面/服务器架构)和 arm64(Raspberry Pi 和一些云服务器使用)构建镜像。

安全性改进:扫描镜像中的漏洞

安全性始终是重中之重。你不希望推送有漏洞的镜像。

步骤 7:扫描 Docker 镜像中的漏洞

你可以将 Trivy 和 Snyk 等安全工具集成到你的 GitHub Actions 中,以在构建过程中扫描你的镜像。这是一个使用 Trivy 的示例:

- name: Scan Docker image for vulnerabilities
  run: |
    trivy image myapp:${{ github.sha }}
    if [ $? -ne 0 ]; then exit 1; fi

如果 Trivy 检测到漏洞,构建将失败。这确保只有安全的镜像才能被推送。

自动化部署

你已经构建了你的 Docker 镜像,现在必须将其推送到注册表。现在,是时候部署它了。

步骤 8:部署到 Kubernetes

使用 GitHub Actions,你可以轻松地将你的 Docker 镜像部署到 Kubernetes 集群。这是如何做到的:

- name: Deploy to Kubernetes
  uses: appleboy/kubernetes-action@v0.1.0
  with:
    kubeconfig: ${{ secrets.KUBECONFIG }}
    context: ${{ secrets.K8S_CONTEXT }}
    command: kubectl set image deployment/myapp myapp=myapp:${{ github.sha }}

该 action 使用标记为 ${{ github.sha }} 的最新镜像更新 Kubernetes 部署。

总结

使用GitHub Actions 自动化你的 Docker 工作流程可以显著提高你的开发管道、可靠性和安全性。因此,你现在拥有一个无需手动干预的自动化管道,它可以构建 Docker 镜像,将它们推送到注册表,扫描它们以查找已知漏洞,并将它们部署到你的环境中。

最好的部分?你只需几行 YAML 即可直接从 GitHub 完成所有这些操作。因此,无论你是推送代码、测试镜像还是部署到生产环境,GitHub Actions 都能满足你的需求。

那么,你准备好冒险了吗?立即开始自动化你的 Docker 工作流程!有关完整的演示,请查看 GitHub 存储库。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号