Автоматическое развертывание проектов весенней загрузки на основе Jenkins

сервер

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 Схема архитектуры развертывания

servicearrange.jpg

2 Jenkins автоматически развертывает проекты весенней загрузки

2.1 Загрузка кода в Gitlab

image

image.png

После загрузки в репозиторий кода запустите задачу создания jenkins

image.png

2.2 Создание задачи Дженкинса

  • Создать задачу

image.png

  • добавить проект гитлаб

image

  • Добавьте шаг сборки, который вызывает цель maven верхнего уровня.

image.png

  • Настроить среду maven

image.png

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

image.png

# 只package admin,core,web三个模块
mvn clean package -pl  core,web,admin -am

image.png

  • Используйте дополнительные файлы сценариев, чтобы автоматически отправить пакет maven в репозиторий образов гавани и запустить новый проект выпуска контейнера.

image

#!/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 Выполнение задачи Дженкинса

image.png

  • Вы можете просмотреть шаги сборки maven в консоли.

image.png

  • Как показано на рисунке ниже, это означает, что проект Spring Boot был успешно собран и выпущен.

image.png

image

image

  • Просмотр работоспособности контейнера

image.png

2.4 Доступ к интерфейсу проекта

image

3 Резюме

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

Некоторые ссылки:MacroZheng

Мой личный блог-сайт, приглашаю всех посмотретьличный блог