Правильный способ развертывания развертывания контейнера из GitLab в EC2 - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь развернуть свой контейнер из реестра gitlab в EC2-инстансе, я прибыл, чтобы развернуть свой контейнер, но когда я что-то изменяю и хочу снова развернуть, требуется удалить старый контейнер и старые образы и снова развернуть , для этого я создаю этот скрипт, чтобы удалить все и развернуть снова.

...
deploy-job:
  stage: deploy
  only:
    - master

  script:
    - mkdir -p ~/.ssh
    - echo -e "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - ssh -i ~/.ssh/id_rsa ec2-user@$DEPLOY_SERVER "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com &&
     docker stop $(docker ps -a -q) &&
     docker rm $(docker ps -a -q) &&
     docker pull registry.gitlab.com/doesntmatter/demo:latest &&
     docker image tag registry.gitlab.com/doesntmatter/demo:latest doesntmatter/demo &&
     docker run -d -p 80:8080 doesntmatter/demo"

Когда я пробую этот скрипт, я получаю эту ошибку:

 "docker stop" requires at least 1 argument.    <<-------------------- error
 See 'docker stop --help'.
 Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]
 Stop one or more running containers
Running after script
00:01
Uploading artifacts for failed job
00:01
 ERROR: Job failed: exit code 1

, если вы посмотрите ближе, я используйте $(docker ps -a -q) после остановки docker.

Вопросы:

  1. Я знаю, что это не прекрасный способ сделать мои развертывания (разработчик здесь), не могли бы вы предложить другие способы, только с использованием gitlab и ec2.
  2. Есть ли способ избежать этой ошибки, когда у меня есть или нет контейнеры на моей машине?

1 Ответ

1 голос
/ 25 марта 2020

Возможно, во время выполнения задания контейнеры не выполнялись.

Чтобы избежать этого поведения, вы можете изменить бит, который у вашей команды есть:

docker ps -a -q | xargs -r sudo docker stop
docker ps -a -q | xargs -r sudo docker rm

Это не приведет к ошибкам, если контейнеры не работают.

Впоследствии, действительно, есть другой способ развертывания контейнера в AWS, где есть сервисы, очень хорошо обрабатывающие контейнеры, такие как ECS , EKS или Фаргейт . Подумайте также о terraform для развертывания вашей инфраструктуры по принципу Ia C (даже для вашего экземпляра ec2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...