1. Используйте Jenkins для автоматизации развертывания в рамках микросервисной архитектуры!
В микросервисной архитектуре по мере того, как проект становится все более и более раздробленным, что приводит к появлению все большего количества сервисов, упаковка и развертывание сервисов становятся довольно проблематичными. Компания, в которой я работал раньше, была упакована локально, загружена на сервер, а затем создана скрипт для запуска.Проблема в том, что чем больше аккумулируется сервисов, тем больше рабочей силы и времени уходит на развертывание.Есть ли какой-нибудь способ для нас Развернуть его один раз? После этого как насчет автоматического развертывания, пока вы нажимаете «Выполнить»? Конечно, есть! Затем мы используем Jenkins для завершения автоматизированного интегрированного развертывания в микросервисной архитектуре.
1.1 Подготовка среды
Обратитесь к моему последнему блогу:Настройка среды развертывания Jenkins+Docker+Gitlab+HarborНа этот раз использовались следующие среды:
программное обеспечение | Версия | описывать |
---|---|---|
Docker | 19.03.8 | Новейшая технология горячего контейнера для обеспечения изоляции сервисов |
Docker-compose | latest | Инструмент оркестрации контейнеров |
Harbor | 1.10.1 | Сервис частного репозитория изображений Harbour |
Jenkins | latest | Jenkins является лидером в области программного обеспечения CI&CD с открытым исходным кодом, предоставляя более 1000 подключаемых модулей для поддержки сборки, развертывания, автоматизации и любых потребностей проекта. |
Gitlab | latest | GitLab — это проект с открытым исходным кодом для системы управления складом, использующий Git в качестве инструмента управления кодом. |
1.2 Схема архитектуры развертывания
2 Jenkins автоматически развертывает проекты весенней загрузки
2.1 Загрузка кода в Gitlab
После загрузки в репозиторий кода запустите задачу создания jenkins
2.2 Создание задачи Дженкинса
- Создать задачу
- добавить проект гитлаб
- Добавьте шаг сборки, который вызывает цель maven верхнего уровня.
- Настроить среду maven
Обратите внимание, что если проект является агрегированным проектом, соберите зависимые модули в проекте, в противном случае при построении исполняемых сервисных модулей сборка завершится ошибкой, поскольку эти модули не могут быть найдены.
# 只package admin,core,web三个模块
mvn clean package -pl core,web,admin -am
- Используйте дополнительные файлы сценариев, чтобы автоматически отправить пакет maven в репозиторий образов гавани и запустить новый проект выпуска контейнера.
#!/usr/bin/env bash
# 初始化核心参数
# jenkins任务名
task_name='test'
# jar包名称
app_name='-test'
# 发布版本
version='latest'
# harbor镜像仓库域名地址
harbor_registry='www.example.com'
# 镜像仓库
image_prefix='test'
# maven构建版本
maven_version='0.0.1-SNAPSHOT'
# 初始端口
INIT_EXPOSE=8086
# 对外服务端口
EXPOSE=8086
# jenkins任务构建原路径
jenkins_jar_path='/usr/local/docker/jenkins/jenkins_home/workspace/'${task_name}
# 构建镜像路径
projects_path='/usr/local/projects/'
# 停止删除容器
docker stop ${app_name}
echo 'stop container '${app_name}' success!'
docker rm ${app_name}
echo 'delete container '${app_name}' success!'
# 复制jar包到指定目录
# 注意:单体maven不需要加${app_name},聚合项目需要加入${app_name}
cp ${jenkins_jar_path}${app_name}/target/${app_name}-${maven_version}.jar ${projects_path}${app_name}/
cp ${jenkins_jar_path}${app_name}/src/docker/Dockerfile ${projects_path}${app_name}/
# 构建推送镜像
docker login --username=zhouxinlei --password=Zxl298828 https://${harbor_registry}
docker build -t ${image_prefix}/${app_name}:${maven_version} -f ${projects_path}${app_name}/Dockerfile ${projects_path}${app_name}/.
docker tag ${image_prefix}/${app_name}:${maven_version} ${harbor_registry}/${image_prefix}/${app_name}:${version}
docker push ${harbor_registry}/${image_prefix}/${app_name}:${version}
docker rmi `docker images|grep none | awk '{print $3}'`
docker rmi ${image_prefix}/${app_name}:${maven_version}
# 运行容器
docker run -p ${EXPOSE}:${INIT_EXPOSE} --name ${app_name} -v /etc/localtime:/etc/localtime -v ${projects_path}${app_name}/logs:/var/logs -d ${harbor_registry}/${image_prefix}/${app_name}:${version}
echo 'run container '${app_name}' success!'
- Нажмите Сохранить, чтобы завершить создание задачи выполнения теста.
2.3 Выполнение задачи Дженкинса
- Вы можете просмотреть шаги сборки maven в консоли.
- Как показано на рисунке ниже, это означает, что проект Spring Boot был успешно собран и выпущен.
- Просмотр работоспособности контейнера
2.4 Доступ к интерфейсу проекта
3 Резюме
Создав задачи в Jenkins, мы завершили упаковку и развертывание сервисов в микросервисной архитектуре, так что при каждом изменении кода нам нужно только щелкнуть стартовую задачу, чтобы выполнить упаковку и развертывание в один клик, устраняя необходимость для частой упаковки и развертывания.
Некоторые ссылки:MacroZheng
Мой личный блог-сайт, приглашаю всех посмотретьличный блог