Gitlab CI docker deployment

После достижения лимитов на билды в Bitbucket Pipelines (напомню бесплатный аккаунт дает 50 минут в месяц) единственной нормальной альтернативой стал выглядеть Gitlab.

После просмотра документации и множества различных рецептов созрел следующий элегантный pipeline:

variables:
  CONTAINER_IMAGE: registry.gitlab.com/username/project
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2

stages:
  - build
  - deploy

build:
  stage: build
  image: docker:stable
  services:
    - docker:dind
  script:
  - ./docker/build.sh

deploy:
  image: username/yourimage
  when: manual
  stage: deploy
  only:
    - master
  script:
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan $TARGET_HOST >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - ./docker/deploy.sh

Дополнительно можно добавить шаг по запуску тестов перед сборкой контейнера.

Важно добавить переменные окружения в разделе Settings — CI/CD — Variables:

SSH_PRIVATE_KEY — необходим для установления ssh соединения, публичный ключ должен быть добавлен на удаленную машину.
TARGET_HOST — IP адрес удаленной машины

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *