使用 GitHub Actions 将 Docker 镜像推送至 AWS ECR

本文详细介绍了如何利用 GitHub Actions 自动化 CI/CD 流程,构建、标记并将 Docker 镜像推送至 AWS 弹性容器仓库(ECR),从而实现从代码仓库直接简化部署的完整步骤。

GitHub Actions 能够通过同一 GitHub 仓库内的工作流,实现持续集成/持续部署(CI/CD)流程,以构建、测试和部署代码。GitHub Actions 可以构建镜像并将其推送到 AWS、Docker Hub 等云提供商。我们可以选择不同的操作系统平台(Windows 或 Linux)来运行工作流。

本文将演示如何通过使用 GitHub Actions,简化构建和部署流程,将 Docker 镜像推送到 AWS 弹性容器仓库(ECR)。

前提条件

  • 创建 GitHub 账户
  • AWS IAM 账户凭证
  • AWS ECR 仓库
  • 用于构建 Docker 镜像的 Dockerfile

GitHub 提供了不同的官方 Actions,同时也提供了社区提供的 Actions,与从头开始编写代码相比,它们能更快速、更轻松地集成到工作流中。在本演示中,我们使用了经过 GitHub 验证的官方 Actions。您也可以从 GitHub Marketplace 添加或调整社区提供的任何 Actions。

构建 Docker 镜像并推送至 AWS ECR 的步骤

1. 进入您的 GitHub 仓库创建 Actions 工作流

点击 Actions 并创建工作流 YAML 文件。可以根据需求选择工作流。GitHub 提供了一些推荐选项:我们可以从下方选择并点击配置,一组内置的 Actions 代码将为我们写好,我们可以根据需要进行进一步调整或修改;或者直接点击"自行设置工作流"链接从头创建。这里我们从头编写了工作流。

2. 创建工作流 YAML 文件

工作流文件应保存在 “.github/workflows/” 目录下。

以下是 HelloWorld 应用程序的示例工作流文件。添加任务是为了让 GitHub Actions 知道它需要构建什么以及如何将镜像推送到 AWS ECR。可以根据需要更改或调整步骤。

以下是对工作流文件中代码所执行操作的说明。

GitHub Actions 工作流文件可以通过不同的方式触发。我们可以通过 “on push” 触发,当我们在工作流中给出 push 选项时,那么只要我们向仓库提交任何内容,工作流文件就会触发并运行工作流。此选项不是受控选项,这意味着只要我们提交任何内容,无论我们是否打算运行工作流,工作流文件都会触发。

取而代之的是另一个选项 “on workflow_dispatch”,它允许我们以更可控的方式触发工作流。在下图中,我们使用 “on workflow_dispatch” 选项进行了演示。在这里,我们可以选择手动触发不同的环境。例如,在这个 GitHub 仓库中,我们有环境名称 DEV、QA 和 main。根据我们提供的输入,工作流文件将被触发。在下面的示例中,我们提供了三个主要分支:DEV 和 QA。

  • 检出代码:步骤 actions/checkout@v4 从仓库拉取代码。
  • 设置 JDK 17 并构建 Maven:步骤 actions/setup-java@v3 与 Maven 将构建并设置 Maven 环境以运行 Java 应用程序。
  • 上传制品:步骤 actions/upload-artifact@v4 在指定路径下,将帮助上传制品,当提供保存 WAR 文件的位置时,可以随后下载以供审查和部署。
  • 配置 AWS 凭证:步骤 aws-actions/configure-aws-credentials@b8c74de753fbc 将帮助设置 AWS CLI 环境并通过访问 AWS_ACCESS_KEY_ID 配置凭证。
  • 构建、标记和推送 Docker 镜像:该步骤将构建 Docker 镜像,对其进行标记,并将其推送到 AWS ECR(弹性容器仓库)。此步骤可以并行或顺序编写。GitHub 为构建、标记和推送提供了推荐的操作,例如 “docker/build-push-action@v5”,我们可以在工作流中使用它来代替传统方式构建。在这里,我们可以使用这一行 Actions 来替代"构建、标记和推送"步骤,这样更快捷、更清晰。

3. 在 Git 仓库中设置环境密钥

进入 Git 仓库的"设置 -> 环境",创建用于从 GitHub 访问 AWS 环境的密钥。需要创建以下密钥:

  • AWS_ACCESS_KEY_ID:输入您的 AWS 访问密钥 ID。
  • AWS_SECRET_ACCESS_KEY:输入您的 AWS 秘密访问密钥。
  • AWS_REGION:您的 ECR 仓库所在的区域,例如 us-east-1 或 west-2。
  • ECR_REPOSITORY:提供您的 ECR 仓库名称,例如 HelloWorld。

4. 提交并将更改推送到 GitHub 仓库

然后,工作流文件将触发 Actions,并执行工作流 YAML 文件中列出的每个步骤。

5. 验证 Docker 镜像是否已推送到 AWS ECR

(此处应有验证截图或描述,但原文未提供具体内容)

结论

从以上步骤可以看出,GitHub Actions 通过设置包含所需作业的工作流文件,并在作业内部设置构建和部署步骤,自动化了流程。这些步骤都位于存放应用程序代码的同一仓库内,无需寻找单独的集成和部署工具。希望本文能帮助您在您的仓库中使用 GitHub Actions,同样也用于 CI/CD 自动化流程。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计