Рабочий процесс непрерывной интеграции с Docker Swarm

Вот моя установка, этот вывод был взят из docker-machine ls. Использование докер-машины для подготовки роя.

NAME             ACTIVE      DRIVER         STATE     URL                          SWARM                     DOCKER    ERRORS
cluster-master   * (swarm)   digitalocean   Running   tcp://REDACTED:2376   cluster-master (master)   v1.11.1   
kv-store         -           digitalocean   Running   tcp://REDACTED:2376                              v1.11.1   
node-1           -           digitalocean   Running   tcp://REDACTED:2376   cluster-master            v1.11.1   
node-2           -           digitalocean   Running   tcp://REDACTED:2376   cluster-master            v1.11.1   

Сейчас я ищу способ настроить рабочий процесс CI/CD. Вот моя первоначальная идея:

  1. Создайте автоматическую сборку на Docker Hub (bitbucket)
  2. После того, как изменения будут отправлены, запустите сборку на докер-хабе.
  3. Тестирование будет проводиться на Docker Hub (тест npm)
  4. Создайте веб-хук в Docker Hub после успешной сборки.
  5. Веб-перехватчик укажет на мое собственное приложение, которое затем внесет изменения в рой.

Вопросы:

  • Можно ли запускать тестирование на Docker Hub или мне следует полагаться на другой сервис?
  • Если я буду полагаться на другой сервис, какой сервис вы порекомендуете?
  • Моя основная проблема заключается в том, чтобы внести изменения в рой докеров. Должен ли я настроить свой docker-swarm на удаленной машине и разместить там приложение?



Ответы (1)


В первой части процесса все выглядит нормально. Сложность заключается в управлении развернутыми производственными контейнерами.

Можно ли запускать тестирование на Docker Hub или мне следует полагаться на другой сервис?

Да, можно запускать тесты на Docker Hub, если вам не нужны дополнительные интеграционные тесты.

Мне нужно интегрировать мои контейнеры с сервисами amazon и иметь довольно нестандартное развертывание, поэтому эта часть тестирования должна быть выполнена на экземпляре amazon.

Моя основная проблема заключается в том, чтобы внести изменения в рой докеров. Должен ли я настроить свой docker-swarm на удаленной машине и разместить там приложение?

Если вы используете только одну машину, вам не нужны дополнительные накладные расходы на использование роя. Если вы планируете масштабироваться до более крупного развертывания с несколькими узлами, да, развертывайте на удаленной машине, потому что вы быстрее обнаружите подводные камни, связанные с использованием swarm.

Вам нужно подумать о том, как вы удаляете старые версии и добавляете в рой последнюю версию своих контейнеров, что часто называют планированием.

Можно использовать один простой подход:

  1. Удалить трафик из старого работающего контейнера
  2. Остановить старый работающий контейнер
  3. Вытащить последний контейнер
  4. Запустить последний контейнер Промыть и повторить для всех запущенных контейнеров.

Это делается в рое докеров путем объявления службы. Затем обновление изображения, которое можно наблюдать, как задание. Дополнительные сведения об этом процессе см. в разделе Применить непрерывное обновление к swarm и как это сделать в Amazon обновление контейнеров Docker в ecs

person tomwj    schedule 21.06.2016
comment
Я думаю, что единственная проблема в вашем ответе - удаление трафика из старого контейнера. Мне нужно развернуть его без простоев. - person mateeyow; 22.06.2016
comment
Тогда вам нужно запустить несколько контейнеров, чтобы один контейнер мог обрабатывать трафик, пока другой обновляется. - person tomwj; 22.06.2016
comment
Я думаю, что лучший способ — создать сине-зеленое развертывание. - person mateeyow; 23.06.2016