Управление развертываниями Docker Swarm и Docker Compose с помощью действий GitHub
Существует множество инструментов непрерывной интеграции и доставки, которые можно использовать для запуска конвейеров CI / CD, таких как Jenkins, Travis CI и CircleCI. Когда дело доходит до проектов, размещенных на GitHub, доступна еще одна нативная опция - Рабочие процессы GitHub.
Рабочие процессы GitHub можно использовать для достижения нескольких целей, таких как создание образов Docker, запуск модульных тестов и даже развертывание на удаленном сервере. Рабочие процессы могут запускаться событиями GitHub, а также внешними событиями. Например, можно создать рабочий процесс, который будет выполняться после создания новой версии в репозитории. Кроме того, тот же рабочий процесс можно настроить так, чтобы он запускался внешним вызовом API.
Поскольку рабочие процессы GitHub можно запускать с помощью собственных событий GitHub и без определения веб-перехватчиков, этот инструмент гораздо проще использовать и определять, чем другие инструменты и параметры.
Рабочие процессы GitHub определены в файлах формата YAML, которые описывают, какие действия или шаги необходимо выполнить во время рабочего процесса. Вы можете узнать больше о внутреннем устройстве рабочих процессов GitHub и действиях GitHub в статье Создание действий GitHub с использованием контейнеров Docker.
Поскольку действия GitHub могут использоваться для замены других инструментов CI и обеспечения простого и понятного способа определения задач CI, я решил использовать их для управления и определения конвейеров CI / CD для моих проектов, размещенных на GitHub.
Один из конвейеров, который я хотел построить, - это конвейер для развертывания служб Docker на удаленном сервере с помощью команд Docker. К сожалению, я не смог найти никаких действий GitHub на торговой площадке, которые могли бы удовлетворить мои потребности и помочь мне выполнить развертывание Docker на удаленных серверах. В результате я решил создать свой собственный экшен GitHub для развертывания сервисов Docker.
В этой статье я шаг за шагом объясню внутреннее устройство и детали действия Github, которое я создал для управления развертыванием службы Docker.
Требования к действию
Как я уже говорил ранее, я сначала просмотрел действия GitHub, чтобы найти существующее действие, которое я могу использовать для развертывания служб Docker, но я не смог найти того, что соответствует моим потребностям. Ниже приведены необходимые функции, которые я искал для реализации моих конвейеров CI / CD.
- Поддержка двух разных режимов развертывания:
→ Docker swarm: поддержка развертывания сервисов Docker swarm из предопределенных файлов стека Docker.
→ Docker Compose: поддержка развертывания контейнера Docker с помощью Docker Compose.
- Развертывайте службы Docker с помощью Docker API удаленно из рабочих GitHub без копирования каких-либо файлов на удаленные серверы.
- Поддержка развертывания без Docker API: в этом случае файлы Docker Compose будут скопированы на удаленный сервер, а команды Docker будут выполняться на серверах с использованием протокола SSH.
- Разрешите извлекать образы Docker на удаленные серверы перед развертыванием контейнеров Docker.
- Перед развертыванием новых версий контейнеров выполните задачи перед развертыванием. Например, запуск миграции схемы базы данных для обновления базы данных приложения перед созданием новых контейнеров Docker.
Использование действия GitHub
Реализованное действие GitHub можно использовать так же, как и все остальные действия. Действия поддерживают ряд обязательных параметров, а также ряд дополнительных параметров, которые можно использовать для влияния на поведение действия или процесс развертывания. Ниже представлен список всех необходимых параметров:
remote_docker_host: адрес удаленного сервера. Значения этого параметра должны иметь следующий формат: пользователь @ хост. И хост должен быть общедоступным, то есть у него должен быть публичный IP-адрес. Действие GitHub будет связываться с удаленным сервером по протоколу SSH.ssh_public_key: открытый ключ удаленного сервера. Это тот же ключ, который будет добавлен вknown_hostsфайлы после успешного SSH-соединения с сервером.ssh_private_key: закрытый ключ, используемый для подключения к удаленному серверу. Открытая часть этого ключа должна быть добавлена вauthorized_hostsфайлы на удаленном сервере.args: аргументы командыdockerилиdocker-compose, которая будет использоваться для запуска развертывания.
В дополнение к указанным выше обязательным параметрам действие поддерживает указанные ниже необязательные параметры. Каждый из этих параметров имеет значение по умолчанию, которое будет использоваться в случае отсутствия значения:
pre_deployment_command_args: аргументы для команды перед развертыванием. Значение по умолчанию - пустая строка.docker_prune: логический вход для запуска командыdocker-prune. Значение по умолчанию -false.pull_images_first: потянитеdocker imagesперед развертыванием. Значение по умолчанию -false.deployment_mode: режим развертыванияdocker-swarmилиdocker-compose. По умолчаниюdocker-compose.copy_stack_file: скопируйте файл стека на удаленный сервер и разверните с сервера. По умолчаниюfalse.deploy_path: Путь, куда будут скопированы файлы стека. По умолчанию~/docker-deployment.stack_file_name: используется файл стека Docker. По умолчаниюdocker-compose.yaml.keep_files: количество файлов, которые будут храниться на сервере. По умолчанию - три.
Примеры использования действия
Разработанное действие можно использовать по-разному и для достижения разных целей. Ниже приведены краткие описания четырех вариантов использования, в которых можно использовать это действие.
Случай первый. Разверните службу роя на удаленном кластере роя Docker с помощью Docker API.
Случай второй. Разверните docker-compose стек на удаленном сервере Docker с помощью Docker API.
Случай третий. Разверните службу роя в удаленном кластере роя Docker, выполнив команды развертывания в кластере роя.
Случай четвертый. Разверните docker-compose стек на удаленном сервере Docker, выполнив команду на узле Docker.
Заключение
Действия GitHub - один из лучших инструментов для реализации собственных конвейеров CI / CD на GitHub. Торговая площадка содержит сотни, если не тысячи, действий, которые можно использовать для построения желаемых конвейеров. Кроме того, создание новых действий и их публикация на рынке для поддержки новых сценариев использования CI / CD довольно проста и понятна.
В этой статье проиллюстрировано и объяснено действие GitHub, которое я создал, чтобы помочь в развертывании служб Docker и контейнеров в роу докеров и узлах докеров.