Jenkins CI/CD 持续集成、持续部署(微服务多项目部署、单项目部署)

1.安装Jenkins

推荐使用Docker compose安装

新建docker-compose.yml脚本,修改相关信息,脚本执行命令 docker-compose up -d

version: '3.7'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    restart: unless-stopped
    ports:
      - '8082:8080'
      - '50000:50000'
    volumes:
      - /mnt/data/jenkins_home/:/var/jenkins_home
      - /mnt/data/maven/apache-maven-3.9.0:/usr/local/maven
      - /usr/local/java-1.8.0-openjdk:/usr/local/java
      - /mnt/data/maven/apache-maven-3.9.0/conf/settings.xml:/usr/local/maven/conf/settings.xml
    networks:
      - gljk
networks:
  gljk:
    driver: bridge

jdk、maven使用的是宿主机服务。

2 访问jenkins

输入 http://ip:8082 访问jenkins,提示需要解锁,云服务器部署配置好相关端口的安全组,防火墙配置。
在这里插入图片描述到/mnt/data/jenkins_home/secrets/initialAdminPassword复制密码并登录
在这里插入图片描述
选择自定义插件,admin继续
在这里插入图片描述

点击开始使用!

3.插件安装

安装之前,先更换一下插件下载地址,升级站点url:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
在这里插入图片描述
安装以下插件:

  1. Maven Integration
  2. Publish Over SS
  3. Fail The Build
  4. Ant Plugin
  5. GitLab Plugin

全局工具配置(这里配置的路径都是容器中的路径)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

目标服务器配置

当项目自动构建完成之后,会将打包好的工程,经由网络传输到目标服务器,配置相关信息

在这里插入图片描述
修改时区
在这里插入图片描述

4.新建任务

输入任务名称,选择构建maven项目
在这里插入图片描述配置源码信息
在这里插入图片描述编译配置,这里配置的信息是关于整个项目的编辑详情,微服务项目下有多个子项目,更新无需所有子项目进行更新,所有需要告诉maven编辑具体的服务。
在这里插入图片描述编辑命令:clean install -pl users -am -amd -Pdev -Dmaven.test.skip=true
参数说明:

-am --also-make 同时构建所列模块的依赖模块;
-amd -also-make-dependents 同时构建依赖于所列模块的模块;
-pl --projects 构建制定的模块,模块间用逗号分隔;
-rf -resume-from 从指定的模块恢复反应堆。
users 为指定打包服务名称

目录结构如下:
在这里插入图片描述
单独编译项目,后面远程推送会报错,这里设置编辑为成功状态。
在这里插入图片描述在这里插入图片描述
远程设置(一定要找对目录位置)
在这里插入图片描述
保存后点击构建
在这里插入图片描述

5.相关问题

构建控制台报错:ERROR: Failed to parse POMs

解决方法:

1、maven仓库目录可能没有写入的权限,对仓库目录授权:chmod -R 775 [maven 目录路径]

2、微服务项目,排查下多模块文件中,是否存在 relativePath 标签,删除该标签

6.启动脚本

设置执行权限:chmod u+x users.sh

包文件路径及名称(目录按照各自配置)
APP_NAME=/mnt/data/huorantech_jar/users/users-1.0.0.jar

#日志文件路径及名称(目录按照各自配置)
LOG_FILE=/mnt/data/huorantech_jar/users/users.log

#查询进程,并杀掉当前jar/java程序

pid=`ps -ef|grep $APP_NAME | grep -v grep | awk '{print $2}'`
kill -9 $pid
echo "$pid进程终止成功"

sleep 2

#判断jar包文件是否存在,如果存在启动jar包,并时时查看启动日志

if test -e $APP_NAME
then
	echo '文件存在,开始启动此程序...'

	# 启动jar包,指向日志文件,2>&1 & 表示打开或指向同一个日志文件
	nohup java -jar $APP_NAME > $LOG_FILE 2>&1 &

	#企业微信机器人通知配置
	date=$(date +%Y-%m-%d)
	time=$(date "+%H:%M:%S")
	content="**更新通知**
	    >Time:$date.$time
	    >Info:"用户服务更新成功"
	"
	webHookUrl="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?xxx"
	content='{"msgtype": "markdown","markdown": {"content": "'$content'","mentioned_list":"@all"},}'
	echo "content : $content"
	curl --data-ascii "$content" $webHookUrl
	echo "over!"

	#实时查看启动日志(此处正在想办法启动成功后退出)
	#tail -f $LOG_FILE

	#输出启动成功(上面的查看日志没有退出,所以执行不了,可以去掉)

	#echo '$APP_NAME 启动成功...'
else
	echo '$APP_NAME 文件不存在,请检查。'
fi

猜你喜欢

转载自blog.csdn.net/m0_46803792/article/details/129028804