使用GitHub Actions将Docker镜像推送至AWS弹性容器仓库

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

如何使用GitHub Actions将Docker镜像推送至AWS弹性容器仓库(ECR)

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

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

前提条件

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

GitHub提供了不同的官方Action,也有社区提供的Action,这允许比从零开始编写代码更快、更轻松地集成到工作流中。在本演示中,我们使用了GitHub验证的官方Action。你也可以从GitHub Marketplace添加或调整社区提供的任何Action。

构建和推送Docker镜像到AWS ECR的步骤

1. 前往GitHub仓库创建Actions工作流

点击“Actions”并创建一个工作流YAML文件。可以根据需求选择工作流。GitHub提供了一些推荐选项:我们可以从下方选择并点击“configure”,系统将为我们编写一组内置的Action代码,我们可以根据需要进行调整,或者直接点击“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并构建Mavenactions/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",我们可以在工作流中使用它,而不是以传统方式构建。这里我们可以使用这一行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仓库

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

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

结论

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

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