自托管gitlab CI / CD推送注册表到ECS服务

时间:2019-01-05 07:53:05

标签: docker gitlab gitlab-ci amazon-ecs docker-registry

我正在ubuntu 16.04上使用自托管gitlab。我已经成功创建了ECS和服务。现在,我想将微服务部署到AWS ECS。我不知道如何将我的私有注册表docker映像推送到ecs。我有gitlab-ci.yml文件:

        qs1 = qs.annotate(
        difference = ExpressionWrapper(F('purchase_sum') - F('sales_sum'), output_field=DecimalField()),

    ) 

gitlab.rb文件中的外部注册表URL是:

image: docker:latest
services:
  - docker:dind
stages:
- build
- package
- deploy
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
DOCKER_DRIVER: overlay
before_script:
#  - echo `pwd` # debug
#  - echo "$CI_BUILD_NAME, $CI_BUILD_REF_NAME $CI_BUILD_STAGE" # debug
- export GRADLE_USER_HOME=`pwd`/.gradle
- export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- chmod +x gradlew

 cache:
 paths:
 - .gradle/wrapper
 - .gradle/caches

build:
 stage: build
 image: openjdk:8-jdk
tags:
 - tag
script:
 - ./gradlew assemble
artifacts:
 paths:
   - build/libs/*.jar
 expire_in: 1 week
 only:
- master

 docker-build:
 stage: package
tags:
- tag
script:
- docker build -t registry.gitlab.example.com/root/abc:latest .
- docker login registry.gitlab.example.com -u gitlab-ci-token -p xyz
- docker push registry.gitlab.example.com/root/abc:latest
deploy:
 tags:
  - tag
 script:

after_script:
 - echo "End CI"

但是如何在ecs部署中使用此功能? 我有ubuntu机的公共IP。

2 个答案:

答案 0 :(得分:1)

您可能会选择将ECR与ECS一起使用。要推送到AWS ECS,您需要一个URL;看起来像:xxxxxxxxxxxx.dkr.ecr.your-region.amazonaws.com/url。然后,您可以在gitlab-ci.yml中执行以下操作:

variables:
  REPOSITORY_URL: your_url

build:
  stage: build
  script:
    - $(aws ecr get-login --no-include-email --region us-east-1)
    - docker build -t $REPOSITORY_URL .
    - docker push $REPOSITORY_URL
  tags:
    - docker

请不要忘记在设置(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY)中设置这些env变量。您可能还想在before-script

中安装aws-cli

答案 1 :(得分:0)

还要检查GitLab 13.3(2020年8月)是否可以解决您的问题:

本地JSON中的ECS任务定义

今天,GitLab的ECS部署模板更新了已在您附加的AWS账户中定义的现有任务定义。在GitLab流程中更新任务定义也很常见。

现在,您可以在本地存储库中更新JSON任务定义,并在知道该任务将在AWS账户中正确创建的情况下推送它,从而改善您的标准开发流程。

请参见DocumentationIssue

请参见this video as an example


还有GitLab 13.6(2020年11月)

创建作业以停止ECS审核应用

我们最近添加了对AWS ECS的支持,因此您可以将其用作Auto DevOps的部署目标。
但是,针对ECS目标的评论应用并未自动停止。

为解决此问题,Deploy_ECS模板已扩展为在Auto DevOps流程中自动停止查看应用程序,以免浪费资源。
这样可以确保部署到ECS的Auto DevOps用户和使用Kubernetes的用户都具有类似的体验,无需手动停止并跟踪审阅应用程序即可自动工作。

https://about.gitlab.com/images/13_6/ecs_stop_review.png -- Create job to stop ECS review Apps

请参见DocumentationIssue