Как автоматически развернуть образ Docker на собственном сервере с помощью GitLab?
Я пытаюсь погуглить его в течение нескольких часов, но не могу найти его. У меня есть приложение Java/Spring (+MySQL, если это имеет значение), и я ищу, чтобы создать CI для этого.
Я знаю, что делать и как:
- я знаю, что мне нужно переместить мой РЕПО Git в Gitlab.
- Push to repo вызовет сценарий CI.
- Gitlab встроит мой образ docker в реестр Docker Gitlab.
Вопрос:
Что я должен сделать, чтобы заставить docker compose на моем VPS, чтобы вытащить новый образ из Gitlab и перезапустить сервер?
Я знаю (поправьте меня, если я ошибаюсь), что на моем VPS я должен запустить docker-compose pull && docker-compose up
внутри моей папки приложения, но я буквально не знаю, как сделать это автоматически с помощью Gitlab?
1 ответ:
Что мне нужно сделать, чтобы заставить docker compose на моем VPS извлечь новый образ из Gitlab и перезапустить сервер?
@m-uu, вам не нужно перезапускать сервер вообще, просто сделайте
docker-compose up
, чтобы вытащить новый образ и перезапустить службуЯ знаю (поправьте меня, если я ошибаюсь) , что на моем VPS я должен запустить docker-compose pull && docker-compose внутри моей папки приложения, но я буквально не знаю, как сделать это автоматически с помощью Gitlab?
Да, вы находитесь на правильный путь. Посмотрите на мой конфигурационный файл GitLab CI, я думаю, что его нетрудно изменить для Java-проекта. Просто дайте вам идеи, как построить, протолкнуть в реестр и развернуть образ на вашем сервере. Одна вещь, которую вам нужно сделать, это сгенерировать SSH-ключи и нажать public на сервер (.ssh / authorized_keys) и закрытая для конвейера GitLab секретная переменная (https://docs.gitlab.com/ee/ci/variables/#secret-variables )
cache: key: "cache" paths: - toscale-api stages: - build - build_image - deploy build: image: golang:1.7 stage: build script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" > ~/key && chmod 600 ~/key - ssh-add ~/key - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - go get -u github.com/kardianos/govendor - mkdir -p $GOPATH/src/gitlab.com/toscale/toscale-api - mv * $GOPATH/src/gitlab.com/toscale/toscale-api - cd $GOPATH/src/gitlab.com/toscale/toscale-api - govendor sync - ls -l /go - ls -l /go/src - go build -o toscale-api - cd - - cp $GOPATH/src/gitlab.com/toscale/toscale-api/toscale-api . - ls -l build_image: image: docker:latest stage: build_image script: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE . - docker push $CI_REGISTRY_IMAGE deploy-dev: image: debian:jessie stage: deploy environment: name: dev script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" > ~/key && chmod 600 ~/key - ssh-add ~/key - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' # copy docker-compose yml to server - scp docker-compose.dev.yml root@SERVER_IP:/home/toscale/toscale-api/ # login to gitlab registry - ssh root@SERVER_IP docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY # then we cd to folder with docker-compose, run docker-compose pull to update images, and run services with `docker-compose up -d` - ssh root@SERVER_IP "cd /home/toscale/toscale-api/ && docker-compose -f docker-compose.dev.yml pull api-dev && HOME=/home/dev docker-compose -f docker-compose.dev.yml up -d" only: - dev
Вам также понадобится GitLab runner с поддержкой Docker. Как установить это посмотрите в GitLab doc, пожалуйста.
О стадиях:
build
- просто измените его, чтобы построить то, что вам нужноbuild_image
- очень просто, просто войдите в реестр gitlab, создайте новый образ и вставьте его в реестр. Посмотрите наcache
часть, она должна кэшировать файлы между этапами и может быть разной для вас.deploy-dev
- эта часть больше о том, что вы спросили. Здесь первые 6 команд просто установите ssh и создайте свой файл закрытого ключа, чтобы иметь доступ к вашему VPS. Просто скопируйте его и добавьте ваш SSH_PRIVATE_KEY для секретных vars в GitLab UI. Последние 3 SSH команды более интересны для вас.