我正在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。
答案 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
答案 1 :(得分:0)
还要检查GitLab 13.3(2020年8月)是否可以解决您的问题:
本地JSON中的ECS任务定义
今天,GitLab的ECS部署模板更新了已在您附加的AWS账户中定义的现有任务定义。在GitLab流程中更新任务定义也很常见。
现在,您可以在本地存储库中更新JSON任务定义,并在知道该任务将在AWS账户中正确创建的情况下推送它,从而改善您的标准开发流程。
请参见Documentation和Issue。
还有GitLab 13.6(2020年11月)
创建作业以停止ECS审核应用
我们最近添加了对AWS ECS的支持,因此您可以将其用作Auto DevOps的部署目标。
但是,针对ECS目标的评论应用并未自动停止。为解决此问题,
Deploy_ECS
模板已扩展为在Auto DevOps流程中自动停止查看应用程序,以免浪费资源。
这样可以确保部署到ECS的Auto DevOps用户和使用Kubernetes的用户都具有类似的体验,无需手动停止并跟踪审阅应用程序即可自动工作。请参见Documentation和Issue。