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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自托管gitlab CI / CD推送注册表到ECS服务相关的知识,希望对你有一定的参考价值。

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

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"

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

registry.gitlab.example.com

但是如何在ecs部署中提供这个?我有ubuntu机器的公共IP。

答案

您可能可以选择将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

不要忘记在设置中创建这些env变量(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY)。您可能还想在before-script中安装aws-cli

以上是关于自托管gitlab CI / CD推送注册表到ECS服务的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CI/CD 为 Gitlab 注册表推送基于 docker compose 的图像

用 GitLab 做 CI/CD 是什么感觉,太强了

好文分享GitLab CI/CD前端自动流水线发布教程

无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。 docker 守护进程是不是正在运行?带有自托管运行器的 Gitlab Cloud CI/CD 错误

剪切新版本时如何触发 GitLab CI/CD 管道?

Gitlab CI - 注册表和 nginx