目录
1.下载安装
通过官方文档下载好之后更改配置
这里完全可以参照官网
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum upgrade
yum install epel-release java-11-openjdk-devel
yum install jenkins
systemctl daemon-reload
2.更改配置
这里主要更改这个 /etc/sysconfig/jenkins文件
这里可以修改jenkins home 和端口号,修改jenkins home 路径后后方便日志查看
/etc/init.d/jenkins 添加jdk安装路径 (也可以不用更改)
3.启动Jenkins
# systemctl daemon-reload
# systemctl start jenkins.service //启动jenkins
# systemctl enable jenkins.service //设置jenkins开机启动
# systemctl stop jenkins.service //关闭jenkins
# systemctl status jenkins.service //查看jenkins的状态
原文链接:https://blog.csdn.net/finghting321/article/details/108616750
3.1 重启jenkins服务
在浏览器地址加restart
关闭jenkins 加exit
重新加载配置信息加 reload
4.访问jenkins
http:ip/端口号
安装失败可以选择重试,一般多试几次就好了...
原文参考:Linux下Jenkins 安装与配置_Map的博客-CSDN博客_jenkins安装与配置 linux
Jenkins 持续集成综合实战_kefeng.wang 的博客-CSDN博客_jenkins持续集成
官方文档:Linuxhttps://www.jenkins.io/doc/book/installing/linux/#red-hat-centos
5.添加全局凭证
5.1 新建项目
5.2 配置构建信息
5.2.1 配置git仓库和凭证
注意:
1.在服务器需要安装 Git
2.此处如果没有配置凭证构建会失败,因为没有权限拉取项目
不配置凭证无法拉取git仓库项目的错误输出
5.2.2 配置凭证
在这里配置好用户名和密码,添加描述
这样在项目中添加git仓库时候就可以使用这个凭据,重新构建发现已经成功
构建成功后可以看到项目已经被拉取到workspace目录
查看项目分支
6 Maven项目构建
6.1 创建任务名选择maven项目
注意: 如果没有红色方框的选项可以参考下文添加maven插件
6.2 添加maven插件
系统管理--> 插件管理-->可选插件
搜索框输入maven将会出现下面插件点击选择安装
原文参考:Jenkins 中创建项目时没有Maven项目怎么办 - 支照 - 博客园
7. 项目构建
之前已经创建过项目,不再做过多的记录
我的视图-->点击视图名称
构建了21次终于成功了,下面将记录出现的问题和解决方法
7.1 构建项目常见问题
7.1.1 解析pom文件失败
这个问题的出现是因为 spring-boot-maven-plugin 没有指定对应的版本
指定最新的版本之后重新尝试问题解决
7.1.2 pom父项目路径错误
7.1.3 重新拉取时清除包失败
由于前面的步骤是我手动在服务器拉取最新包,而且使用的是root用户,导致拉取的jar文件也是root组的,导致jenkins用户无法执行清除操作
这里可以手动在服务器删除相应文件然后重试
7.1.4 权限不足
jenkins会复制项目jar包到maven目录
但是maven本地仓库repo目录所属用户和用户组都是root,并且对其他用户的权限是不可写入
解决方法:编辑vim /etc/sysconfig/jenkins 更改 JENKINS_USER用户为root
vim /etc/sysconfig/jenkins
7.1.5 无法解析镜像仓库的pom文件
之前因为拉取速度较慢,配置了阿里镜像,后来删除配置的镜像重新拉取问题解决
8.项目部署
8.1 添加执行shell
8.2 编写可执行的shell脚本
echo "start deploy."
TAR_FILE_PATHS=/data/jenkins/workspace/test-maven02/target/delivery-ocpx-0.0.1-SNAPSHOT.jar
SHELL_PATH=/data/jenkins
sh ${SHELL_PATH}/restart-service.sh ${TAR_FILE_PATHS}
其中用到了三个自己编写的脚本 readme.md
# restart-service.sh 重启服务脚本
用法:sh restart-service.sh [path.file_name]
示例:sh restart-service.sh /data/jenkins/workspace/test-maven02/target/delivery-ocpx-0.0.1-SNAPSHOT.jar
# shutdown.sh 关闭服务脚本
用法:sh shutdown.sh [file_name]
示例:sh shutdown.sh delivery-ocpx-0.0.1-SNAPSHOT.jar
# start.sh 启动服务脚本
用法:sh start.sh [path.file_name]
示例:sh start.sh /data/jenkins/workspace/test-maven02/target/delivery-ocpx-0.0.1-SNAPSHOT.jar
8.2.1 restart-service.sh
echo "########################### well restart service! ########################"
path=${1%/*}
file=${1##*/}
echo "path:" ${path}
echo "file:" ${file}
sh /data/jenkins/shutdown.sh ${file}
sh /data/jenkins/start.sh $1
echo "########################### restart service end! ########################"
8.2.2 shutdown.sh
# 停止服务
service_name=$1
echo "########################### well stop ${service_name} service! ########################"
echo "service_name:" ${service_name}
pcmd="ps -ef |grep ${service_name}|grep -v "grep" | head -n1 | awk '{printf("%d/n"), $2}' | awk -F/ '{printf("%d"), $1}'"
echo "pcmd:" ${pcmd}
port=${pcmd}
echo "port:" ${port}
kill -9 ${port}
echo "########################### ${service_name} service is shutdown! ########################"
8.2.3 start.sh
# 启动服务
echo "########################### well start service! ########################"
log_file=${1%.*}.log
file_name=${1##*/}
echo "log_file:" ${log_file}
echo "file_name:" ${file_name}
scmd="nohup java -jar ${1} > ${log_file} 2>&1 &"
echo "${scmd}"
${scmd}
echo "########################### start service end! ########################"
三个文件存放在jenkins根目录下,建议将权限更改为755
8.3 项目部署
点击 立即构建
此时项目已经正常启动了
8.3.1 启动脚本无法后台运行
虽然项目正常构建并且正常运行,但是项目一直处于正在构建的状态
问题原因:Jenkins执行shell是Jenkins来将你填写的shell脚本语句在部署的机器上执行,实际上就是Jenkins启动了子进程到部署的机器上执行命令行,所以当最后一行命令执行结束后,Jenkins会杀掉所有在此过程中创建的子进程,如果这里有需要后台运行的,或者挂起的任务时,在Jenkins执行结束后,这些挂起的或后台的任务都会被杀掉
解决方法:
1.加入环境变量BUILD_ID=DONTKILLME
2.启动参数加入 -Dhudson.util.ProcessTree.disable=true
8.3.2 可后台运行脚本
参考如下:可以拆分多个脚本放在服务器
#!/bin/bash
echo "start deploy."
BUILD_ID=DONTKILLME
TAR_FILE_PATHS=/data/jenkins/workspace/test-maven02/target/delivery-ocpx-0.0.1-SNAPSHOT.jar
OCPX_SERVICE_NAME=delivery-ocpx-0.0.1-SNAPSHOT.jar
pid=`ps x|grep ${OCPX_SERVICE_NAME}|grep java|grep -v grep |awk '{printf($1)}'`
echo "pid:${pid}"
if [ -z "${pid}" ]
then
echo "service do not start!"
else
echo "well kill service pid:${pid}"
kill -9 ${pid}
fi
log_file=${TAR_FILE_PATHS/.jar/.log}
# source /etc/profile
nohup java -Dhudson.util.ProcessTree.disable=true -jar ${TAR_FILE_PATHS} > ${log_file} 2>&1 &
或者这样使用
sh "BUILD_ID=DONTKILLME nohup java -jar ${TAR_FILE_PATHS} > ${log_file} 2>&1 &"
还可以这样
s_cmd="BUILD_ID=dontKillMe nohup java -jar ${TAR_FILE_PATHS} > ${log_file} 2>&1 &"
echo "${s_cmd}"
eval ${s_cmd}
也可以使用JENKINS_NODE_COOKIE=dontKillMe (没试过)
原文参考:Jenkins踩坑之旅:nohup后台执行shell命令_qq_34412985的博客-CSDN博客_jenkins 执行nohup
Jenkins构建、发布后台Maven项目时无法后台执行或无法启动的问题(亲测好用)_Aubrey.J的博客-CSDN博客
8.4 访问测试
8.4.1 curl命令测试
curl localhost:9527/version
返回正常的版本信息说明服务正常启动了
9.服务节点管理
9.1 添加服务节点
系统管理-->节点管理-->新建节点
点击保存,启动代理就会自动连接上去,可以查看日志信息
日志中可以看到这样一段话
在节点服务器中可以看到相应的文件
但是此时服务并没有启动
搜索资料发现大家都在用Publish Over SSH ,但是现在这个插件已经被禁了https://www.jenkins.io/security/advisory/2022-01-12
参考原文:jenkins插件Publish Over SSH因安全问题下架 - 爱码网
10.创建流水线
10.1 Blue Ocean插件
前面有安装插件记录这里不做过多展示
打开Blue Ocean
选择Git代码仓库,选择SSH方式连接
这里连接Git远程仓库有一个坑,选择HTTPS方式很难弄,应该不是我密码输错了
在git远程仓库中将公钥添加进去,点击创建流水线
官网参考:Blue Ocean
11.忘记密码怎么办
有时候太久没有登陆jenkins之后需要登陆,但是忘了密码
11.1 查看配置文件
找到jenkins目录,下面有个users目录
# 我的根目录是 /data/jenkins
less /data/jenkins/users/users.xml
可以看到用户信息,帮助唤醒部分记忆,但是需要对用户名密码记忆深刻,当然很多人是真的忘了,所以需要换种方法