如何使用GitHub Actions将Docker镜像推送至AWS弹性容器仓库
GitHub Actions使得CI/CD(持续集成/持续部署)流程能够在同一个GitHub仓库内通过工作流来构建、测试和部署代码。GitHub Actions可以构建镜像并将其推送到诸如AWS和Docker Hub等云服务提供商。我们可以选择不同的操作系统平台(Windows或Linux)来运行工作流。 本文将演示如何利用GitHub Actions来简化构建和部署过程,从而将Docker镜像推送到AWS弹性容器仓库。
先决条件
- 创建GitHub账户
- AWS IAM账户凭据
- AWS ECR仓库
- 用于构建Docker镜像的Dockerfile
GitHub提供了不同的官方Actions,也包含社区提供的Actions,这使得比从零开始编写代码更快速、更容易地集成到工作流中。在本演示中,我们使用了经过GitHub验证的官方Actions。您也可以从GitHub Marketplace添加或调整任何社区提供的Action。
构建并将Docker镜像推送到AWS ECR的步骤
1. 前往您的GitHub仓库创建Actions工作流
点击Actions,创建一个工作流YAML文件。可以根据需求选择工作流。GitHub提供了一些推荐选项:我们可以从下方选择并点击"配置",一组内置的Actions代码将为我们写好,我们可以根据需要进行进一步调整,或者直接点击"自行设置工作流"链接从头开始创建。本文是从头开始编写工作流的。
2. 创建工作流YAML文件
工作流文件应保存在".github/workflows/“目录下。 以下是HelloWorld应用程序的示例工作流文件。添加的任务是为了让GitHub Actions知道它需要构建什么以及如何将镜像推送到AWS ECR。步骤可以根据需求进行更改或调整。
代码解释: GitHub Actions工作流文件可以通过多种方式触发。我们可以通过"on 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提供了推荐的Actions,例如
docker/build-push-action@v5,我们可以在工作流中使用它来代替传统方式的构建。我们可以使用这个单行Action来代替"构建、标记和推送"步骤,这样更快速、更简洁。
3. 在Git仓库中设置环境密钥
进入仓库的Settings -> Environment,创建用于从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自动化流程。