как создать конвейер в jenkins для пружинных загрузочных микросервисов - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть проект начальной загрузки с 4-мя микросервисами (реестр служб Eureka, сервер Config, шлюз Zuul и служба пользователя) в одном репозитории с родительским проектом, где у меня есть docker-compose.yml, который читает файлы Docker в микросервисахи использует "application-docker.yml" и "bootstrap-docker.yml"

. Я хотел бы запустить конвейер jenkins после коммита в git, чтобы он компилировался и развертывалсямикросервисы в докере.В конце концов я хотел бы иметь производственную конфигурацию, которая развертывает образы в Kubernetes, возможно, AWS.

Теперь, чтобы работать, микросервисы должны запускаться в следующем порядке:

  1. configserver
  2. Реестр служб eureka
  3. шлюз и т. Д.

Каков наилучший метод?

Если у меня есть отдельные репозитории на микросервис, ядумаю, я могу понять это.Должно быть легко развернуть один микросервис при условии, что реестр configserver и eureka service уже запущен и работает, в действительности они никогда не должны изменяться.

Если у меня есть один репозиторий и я продолжаю разрабатывать новые микросервисы, сделайтеМне нужно иметь отдельный файл jenkins для каждого микросервиса, или я могу иметь файл jenkins в родительском проекте и использовать docker-compose?Как это работает?Любые статьи онлайн, которые могут помочь (не могли найти).Имеет ли это смысл?

Или мне нужно посмотреть на Дженкинса Икс?

Спасибо!

1 Ответ

0 голосов
/ 24 февраля 2019

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

Затем вам потребуется предоставить файл Jenkins в каждом репо.Они будут в основном идентичны.

Если вы хотите быстрые циклы выпуска, вы можете автоматически развернуть один сервис после выпуска.В качестве альтернативы вы можете использовать дополнительный модуль подготовки релизов, который обрабатывает полное развертывание.В обоих случаях я бы использовал файл docker-compose, который обрабатывает взаимосвязь между сервисами.Вы можете принудительно установить правильный порядок, используя 'depen_on, links, volume_from и network_mode: "service: ..." ".Для полной ссылки см. документацию докера .

Если вы хотите сохранить свой единственный репозиторий, ваш Jenkinsfile (ы) должен быть довольно хакерским, я полагаю ... После каждого коммита вылибо

  • соберет все модули -> монолитное поведение

  • так или иначе определит, какие модули были изменены (например, просмотрев журнал git) -> То же поведение, что и в случае с несколькими модулями, но очень радостно

Файл Docker-Compose

Если вы хотите освободить все модули в определенной точкевремени вы можете использовать модуль Release Train, где docker-compose.yml находится рядом с Jenkinsfile.Затем, когда вы захотите отправить свое приложение, вы можете запустить это задание Jenkins.

Если вы хотите отправить каждый сервис сразу после его запуска, независимо от других, вам потребуется доступ к docker-compose..yml из каждого модуля.Вы можете сделать это вручную (так как файлы не будут меняться слишком часто) или создать модуль docker, который вы используете в качестве git-подмодуля во всех ваших службах.

Мы используем общий docker-compose.yml дляэто где каждая версия заменяется переменной:

example-service:
  image: example.service:${EXAMPLE_SERVICE_VERSION}

Затем, чтобы запустить этот конкретный сервис в jenkins, мы используем команду

export EXAMPLE_SERVICE_VERSION=1.1.1
docker-compose -p example-project -f docker-compose.yml up -d example-service
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...