使用GitHub Actions将Docker镜像推送至AWS Elastic Container Repository
GitHub Actions能够在同一个GitHub仓库内通过工作流实现CI/CD(持续集成/持续部署)过程,以构建、测试和部署代码。GitHub Actions可以构建镜像并将其推送到AWS和Docker Hub等云提供商。我们可以选择不同的操作系统平台(Windows或Linux)来运行工作流。
本文将演示如何通过使用GitHub Actions,简化构建和部署流程,将Docker镜像推送到AWS ECR(Elastic Container Repository)。
前提条件
- 创建GitHub账户
- AWS IAM账户凭证
- AWS ECR仓库
- 用于构建Docker镜像的Dockerfile
GitHub提供了不同的官方Actions,并且还有社区提供的Actions,这使得与工作流的集成比从头开始编写代码更快捷、更容易。在本演示中,我们使用了经过GitHub验证的官方Actions。您也可以从GitHub Marketplace添加或调整社区提供的任何Action。
构建并将Docker镜像推送到AWS ECR的步骤
1. 前往您的GitHub仓库创建Actions工作流
点击Actions并创建工作流YAML文件。可以根据需求选择工作流。GitHub提供了一些推荐选项:我们可以从下方选择并点击"configure",内置的Actions代码将会为我们自动生成,我们可以根据需要进行进一步调整或修改,或者直接点击"set up a workflow yourself"链接从头开始创建。本文中我们从头开始编写了工作流。
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: 带有Maven的
actions/setup-java@v3步骤将构建和设置Maven环境以运行Java应用程序。 - 上传构件: 带有指定路径的
actions/upload-artifact@v4步骤将帮助上传构件,当提供保存WAR文件的位置时,可以下载该文件以供审查和部署。 - 配置AWS凭证:
aws-actions/configure-aws-credentials@b8c74de753fbc步骤将帮助设置AWS CLI环境,并通过访问AWS_ACCESS_KEY_ID来配置凭证。 - 构建、标记和推送Docker镜像: 该步骤将构建Docker镜像,标记它们,并将它们推送到AWS ECR(Elastic Container Repository)。这个步骤可以并行或顺序编写。GitHub提供了推荐的Actions用于构建、标记和推送,例如
docker/build-push-action@v5,我们可以在工作流中使用它,而不是以传统方式构建。这里我们可以用这一行Action代替"构建、标记和推送"步骤,这样更快捷、更简洁。
3. 在Git仓库中设置环境机密信息
转到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自动化流程。