Cloud deployment
Cloud deployment
与主要的云提供商进行交互可能已成为交付过程中非常需要的任务. GitLab 通过提供预安装了所需库和工具的 Docker 映像,减轻了这一过程的麻烦. 通过在 CI / CD 管道中引用它们,您将能够更轻松地与所选的云提供商进行交互.
AWS
GitLab 提供了可用于从 GitLab CI / CD 运行 AWS 命令的 Docker 映像,并提供了一个模板,以使其更易于部署到 AWS .
Run AWS commands from GitLab CI/CD
在 GitLab 12.6 中引入 .
GitLab 的 AWS Docker 映像提供了AWS Command Line Interface ,可让您运行aws
命令. 作为部署策略的一部分,您可以通过指定GitLab 的 AWS Docker 映像直接从.gitlab-ci.yml
运行aws
命令.
需要一些凭据才能运行aws
命令:
- 如果您还没有一个 AWS 账户 ,请注册一个.
- 登录到控制台并创建一个新的 IAM 用户 .
选择您新创建的用户以访问其详细信息. 导航到安全凭证>创建新的访问密钥 .
注意:将生成新的访问密钥 ID和秘密访问密钥对. 请立即记录下来.
在您的 GitLab 项目中,转到“设置”>” CI / CD” . 将以下内容设置为环境变量 (请参见下表):
- 访问密钥 ID.
- 秘密访问密钥.
- 地区代码. 您可以检查AWS 区域终端节点列表 . 您可能想要检查要使用的 AWS 服务在所选区域中是否可用 .
| 环保 变量名 | Value | | —- | —- | |
AWS_ACCESS_KEY_ID
| 您的访问密钥 ID | |AWS_SECRET_ACCESS_KEY
| 您的秘密访问密钥 | |AWS_DEFAULT_REGION
| 您的地区代码 |现在,您可以在此项目的
.gitlab-ci.yml
文件中使用aws
命令:deploy:
stage: deploy
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest # see the note below
script:
- aws s3 ...
- aws create-deployment ...
注意:上例中使用的映像(
registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
)托管在GitLab 容器注册表中 ,可以使用. 或者,将映像替换为 AWS ECR 上托管的映像.
Use an AWS Elastic Container Registry (ECR) image in your CI/CD
除了引用托管在 GitLab 注册表上的映像外,您还可以引用托管在任何第三方注册表上的映像,例如Amazon Elastic Container Registry(ECR) .
为此, 将映像推送到 ECR 存储库中 . 然后在.gitlab-ci.yml
文件中引用它,并替换image
路径以指向您的 ECR 图像.
Deploy your application to the AWS Elastic Container Service (ECS)
在 GitLab 12.9 中引入 .
GitLab 提供了一系列CI 模板,您可以将其包含在项目中 . 要自动将应用程序部署到Amazon Elastic Container Service (AWS ECS)集群,您可以在.gitlab-ci.yml
文件中include
Deploy-ECS.gitlab-ci.yml
模板.
GitLab 还提供了可在您的gitlab-ci.yml
文件中使用的Docker 映像 ,以简化使用 AWS 的工作:
- 使用
registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
以使用 AWS CLI 命令. - 使用
registry.gitlab.com/gitlab-org/cloud-deploy/aws-ecs:latest
将您的应用程序部署到 AWS ECS.
在开始此过程之前,您需要 AWS ECS 上的集群以及相关组件,例如 ECS 服务,ECS 任务定义,AWS RDS 上的数据库等. 了解有关 AWS ECS 的更多信息 .
在 AWS ECS 上完成所有设置后,请执行以下步骤:
- 确保将您的 AWS 凭证设置为项目的环境变量. 您可以按照上述步骤完成此设置.
Add these variables to your project’s
.gitlab-ci.yml
file:variables:
CI_AWS_ECS_CLUSTER: my-cluster
CI_AWS_ECS_SERVICE: my-service
CI_AWS_ECS_TASK_DEFINITION: my-task-definition
Three variables are defined in this snippet:
CI_AWS_ECS_CLUSTER
:您要为部署目标的 AWS ECS 集群的名称.CI_AWS_ECS_SERVICE
:绑定到您的 AWS ECS 集群的目标服务的名称.CI_AWS_ECS_TASK_DEFINITION
:与上述服务绑定的任务定义的名称.
您可以在AWS ECS 仪表板上选择目标集群后找到这些名称:
将此模板包括在
.gitlab-ci.yml
:include:
- template: AWS/Deploy-ECS.gitlab-ci.yml
Deploy-ECS
模板随 GitLab 一起提供,可在 GitLab.com 上获得 .提交更新的
.gitlab-ci.yml
并将其推送到项目的存储库中,您就完成了!您的应用程序 Docker 映像将被重建并推送到 GitLab 注册表中. 然后,目标任务定义将使用新 Docker 映像的位置进行更新,结果将在 ECS 中创建新的修订版.
最后,您的 AWS ECS 服务将使用任务定义的新修订版进行更新,从而使群集提取应用程序的最新版本.
警告: Deploy-ECS.gitlab-ci.yml
模板包括Jobs/Build.gitlab-ci.yml
和Jobs/Deploy/ECS.gitlab-ci.yml
“子模板”. 不要单独包括这些”子模板”,而仅包括主Deploy-ECS.gitlab-ci.yml
模板. “子模板”旨在仅与主模板一起使用. 如果不包括主模板,它们可能会移动或发生意外更改,从而导致您的管道失败. 此外,这些模板中的作业名称可能会更改. 不要在您自己的管道中覆盖这些作业的名称,因为当名称更改时,覆盖将停止工作.
另外,如果您不希望使用Deploy-ECS.gitlab-ci.yml
模板部署到 AWS ECS,则始终可以使用基于aws-base
Docker 映像为 ECS运行您自己的AWS CLI 命令 .
deploy:
stage: deploy
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- aws ecs register-task-definition ...