Как обновить контейнер NodeJS Docker? - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть образ NodeJS на основе официального node образа Docker, работающего в производственной среде.

Как поддерживать сервер NodeJS в актуальном состоянии?

  • Как узнать, когда или как часто нужно перестраивать и повторно развертывать образ докера?(Я бы хотел, чтобы он всегда был в курсе)
  • Как мне обновлять пакеты npm внутри образа Docker?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

[ОБНОВЛЕНИЕ] - на основе комментариев от OP

Чтобы получить новейшие образы из Docker, а затем развернуть их с помощью следующего процесса, вы можете использовать API DockerHub (на основеРеестр HTTP API) для запроса тегов изображения.Затем найдите изображение, которое вы используете (Alpine, Slim, Wh независимо) и возьмите его самый последний тег.После этого пройдите тестовый конвейер и зарегистрируйте этот тег в качестве кандидата на развертывание

TOKEN=//curl https://hub.docker.com/v2/users/login with credentials
REPO="node"
USERNAME="MyDockerHubUsername"    
TAGS=$(curl -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/${USERNAME}/${REPO}/tags/)

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

Успешный конвейер (Jenkins, Bamboo, CircleCi, CodePipeline и т. Д.) Будет включать в себя всеэти шаги.И будет в идеале запускаться при каждом коммите:

Статический анализ

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

Тест (единица измерения)

Используйте что-то вроде Karma / Mocha / Cucumber для запуска модульных тестов в вашем коде.

Build

Теперь вы можете создать свой образ Docker.Я предпочитаю инструменты, такие как Packer Hashicorp для создания изображений.Так как я предполагаю, что вы запускаете сервер узлов (Express или что-то в этом роде) из контейнера, вы также можете захотеть развернуть контейнер и запустить некоторое локальное приемочное тестирование после этого этапа.

Регистрация

После того, как вы приняли локальное тестирование контейнера, зарегистрируйте изображение в любой службе, которую вы используете (ECR, Dockerhub, Nexus), и пометьте ее каким-либо значимым образом.

Развертывание

Теперь, когда у вас есть работающий контейнер, вам нужно будет развернуть его в своей среде оркестровки.Это может быть Kubernetes, Docker Swarm, AWS ECS или что-то еще.Однако важно, чтобы вы еще не обслуживали трафик для этого контейнера.

Test (Integration)

Когда контейнер работает в значимой тестовой среде (nonprod,этап, тест, что угодно) теперь вы можете запускать интеграционные тесты против него.Они будут проверять, чтобы убедиться, что он может соединиться с уровнем данных, или будут искать большое количество ошибок 500/400.

Не забывайте - Безопасность всегда должна быть частью вашего тестирования.Это хорошее место для этого

Switch

Теперь, когда вы протестировали в nonprod, вы можете либо развернуть в производственную среду, либо переключиться на стоящие контейнерыпротив которого ты только что проверилЗдесь вы должны решить, будете ли вы использовать зеленый / синий или A / B развертывание.Если синий / зеленый, тогда начните направлять весь трафик в новый контейнер.Если A / B, установите политику маршрутизации на основе некоторого отношения.Что бы вы ни использовали, убедитесь, что у вас есть представление о том, какой процент отказов считается приемлемым.Следите за новым развертыванием на предмет любых сбоев (500 кодов ошибок или все, что вы считаете важным) и убедитесь, что у вас есть возможность быстро выполнить откат к старым контейнерам, если что-то пойдет не так.

Прием

После того, как прошло достаточно времени без дефектов, вы можете принять новый контейнер в качестве стабильного кандидата.Повторно пометите изображение или сохраните тег изображения где-нибудь с обозначением, что оно «стабильно», и задайте для этого нового дефакто-образа для запуска.

Частота

Теперь ответим "Как часто". Частота является побочным эффектом хорошей итеративной разработки. Если изменения в вашем коде ограничены по размеру и области действия, вы должны чувствовать себя уверенно при запуске, когда код проходит тестирование. Таким образом, благодаря сильной практике DevOps вы сможете развернуть новый образ всякий раз, когда код будет добавлен в репозиторий. Это может быть один, два или пятьдесят раз в день. Число в конечном итоге становится произвольным.

Обновление пакетов NPM

Это будет зависеть от того, какие пакеты вы используете. Для общедоступных пакетов вы можете захотеть ограничиться версией. Затем создайте конвейеры, которые тестируют определенные выпуски этих пакетов в среде песочницы, прежде чем допустить их в вашу среду.

Для частных пакетов убедитесь, что у вас есть конвейер для каждого из них. Конвейер должен выполнить анализ, тестирование и другие важные задачи перед регистрацией нового кода с помощью npm или ваших личных репозиториев (например, Nexus)

0 голосов
/ 14 апреля 2019

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

Лучший способ обработать пакет и обновления для образов докера - это создать отдельные теги со всеми обновлениями. Отдельные теги для всех новых обновлений позволяют выполнить откат в случае любой проблемы обратной совместимости.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...