После достижения лимитов на билды в 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 адрес удаленной машины