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

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

我在 ubuntu 16.04 上使用自托管 gitlab。我已经成功创建ECS和服务。现在我想将我的微服务部署到aws ecs。我不知道如何将我的私有(private)注册表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_COMMIT_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 机器的公共(public) 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

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

中安装 aws-cli

关于docker - 自托管 gitlab CI/CD 将注册表推送到 ECS 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54050060/

相关文章:

scala - Akka-cluster 在 EC2/docker 上保存并不断存储有关成员资格的错误信息

gitlab - 如何完全删除在问题评论中上传到 Gitlab 的文件?

gitlab - 将自定义项目模板添加到 GitLab

kubernetes - gitlab auto-deploy-app 容器的事件探针失败

GitLab CI 如何使用此处的文档将 JSON 数据发布到 CI 作业中的 url?

c++ - 如何构建与操作系统隔离的 node-addon-api?

docker - debian 上没有安装证书 :buster docker image?

docker - 崩溃环回错误:为什么导入的DockerHub Pod从未在Openshift Origin中启动?

gitlab - 如何从触发作业中排除 gitlab-ci.yml 更改

php - 禁用 PHPUnit 代码覆盖率输出中的颜色