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