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 自动化流程。