前言
最近又重新弄了一下jenkins,虽然之前也有弄过但是都是在本地服务器部署,而且记录的不够详细,因此这次将写下详细部署过程。
一、下载并启动Jenkins
下载地址:https://jenkins.io/download/ ,选择下载war包
下载完成后用FTP上传到服务器上输入启动命令:nohup java -jar jenkins.war --httpPort=7070 > jenkins.out 2>&1 & ,后面参数是启动端口。
启动完成后浏览器打开http://ip:7070 进入jenkins操作页面,此时会出现一个页面要求你输入密码,此时回到linux控制台,输入tail -100f jenkins.out 查看启动日志,注意看日志,它会打印你的初始密码,复制初始密码并点下一步,后面的操作按提示来就可以了,可以安装推荐的插件也可以自己选,下面将进入JENKINS配置步骤。
二、配置JENKINS
点击jenkins 系统管理->插件管理 点击available(可选插件)选项卡 ,在右上角的搜索框搜索并安装如下几个插件:
1、Git plugin Git client plugin
4、Gitlab Hook Plugin(可选)
再次点击JENKINS的系统管理 -> 系统设置 ,找到Publish over SSH这一栏,如下图配置要发布到该服务器上的连接配置
参数说明:
name:可以随便起 hostname:连接IP地址 Remote Directory: 远程文件夹路径,发布的项目将会在此目录下
username:账号 password:密码 , 除了用账号密码连接外还可以通过private key连接,由于麻烦我在这选择了账号密码连接
)
全局工具配置
这个是基础配置,可不能忘了,分别配置它的JDK GIT 和MAVEN,如果本机已经有了,则输入安装路径即可,如果没有可以使用JENKINS的自动安装功能 ,看下图:
自动安装和手动配置二选一。
三、Jenkins任务配置
新建一个Jenkins任务,输入你的任务名称点确定,然后点配置进入该任务的配置页面。
1、配置源码管理:
找到源码管理点GIT,输入你的项目的GIT URL,如http://localhost:80/project.git ,下面的Credentials是凭据,点添加然后输入登陆gitlab的账号密码
2、配置Build
找到Build一栏,分别配置好Root POM和Goals and options ,root pom是你项目的pom.xml,goals and options是mvn的执行命令,可以填 :install -DskipTests ,不需要填mvn xxx
3、配置Post Steps
选择Add post-build step -> Send files or execute commands over SSH ,然后如下图 配置:
1、name是之前我们在系统配置里添加的远程服务器配置
2、Source files是哪些文件将被发布到远程服务器,可以使用匹配符如:**/*.jar or **/project.jar ,推荐这样填 :**/*.jar,build.sh (将build.sh也打包的因为是发布完可以直接运行该脚本)
3、Remove prefix是要删除的前缀文件夹,例:project/target/p.jar 输入移除前缀:project/target,那么部署后就不会有移除的那些文件夹路径了,推荐不要填,因为它不支持匹配符,只能填死路径 。
4、Exec commond是发布完成后要执行的shell命令,一般用它调用写好的sh脚本,对了如果这里没有Exec command这一栏的话,回到系统配置,找到之前配置远程服务器的地方点开高级配置,把disable exec 取消勾选。
一切准备就绪,最后填写build.sh!
四、Build.sh 重启脚本
这个脚本调了我很久,一开始不是没执行完就结束要么就是启动没反应,该脚本的大致作用是查找该目录下的所有jar文件,并使用nohup java -jar 启动,同时保存它的进程PID,下次启动前先获取PID 调用 KILL命令。
下面上脚本 ,代码上面有说明大家可以根据需要修改。
- #!/bin/bash -ilex
- #jenkin编译时调用的shell,仅使用在测试服务器上
- #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
- source /etc/profile
- #用于保存启动服务的PID
- pid_path=/pids
- #如果PID目录不存在,则创建
- if [ ! -d "${pid_path}" ]; then
- mkdir ${pid_path}
- fi
- #遍历文件夹获取jar
- for file in `find * -name "*.jar"`
- do
- #Jenkins中编译好的jar名称
- jar_name=${file##*/}
- #获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
- pid=$(cat ${pid_path}/${jar_name}.pid)
-
- #rm -f ${www_path}/${jar_name}
- #杀掉以前可能启动的项目进程
- kill -9 ${pid}
- echo $jar_name
- #启动jar,后台启动
- #BUILD_ID=dontKillMe
- BUILD_ID=dontKillMe nohup java -Xmx512m -Xms512m -Xmn200m -jar ${file} > ${jar_name%-*.*.*-SNAPSHOT.jar}.out 2>&1 &
- #将进程ID存入到ufind-web.pid文件中 (pid统一路径)
- echo $! > ${pid_path}/${jar_name}.pid
-
- done
大功告成,最后点立即构建试试效果吧!
PS:JENKINS支持定时自动构建和检测GITLAB代码变动自动构建,由于我目前使用的是多结构的maven工程,一次变动会导致所有项目重新打包,因此并没有使用这个功能,有需要的朋友可以搜索jenkins + gitlab webhook 通过gitlab的接口触发jenkins自动构建
2019-5-21更新升级了shell脚本=======================================
现在支持参数了,根据参数扫描指定的jar包,使用代码如:bash build.sh "service*.jar" "serviceB*.jar"
build.sh:
- #!/bin/bash -ilex
- #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
- export BUILD_ID=dontKillMe
- source /etc/profile
- pid_path=/PID
- function findJar()
- {
- #遍历文件夹获取jar
- for file in `find * -name "${1}"`
- do
- #Jenkins中编译好的jar名称
- jar_name=${file##*/}
- #获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
- pid=$(cat ${pid_path}/${jar_name}.pid)
- #rm -f ${www_path}/${jar_name}
- #杀掉以前可能启动的项目进程
- kill -9 ${pid}
- #启动jar,后台启动
- #BUILD_ID=dontKillMe
- BUILD_ID=dontKillMe nohup java -Xmx512m -Xms512m -Xmn200m -jar ${file} > ${jar_name%-*.*.*-SNAPSHOT.jar}.out 2>&1 &
- echo $! > ${pid_path}/${jar_name}.pid
- done
- }
-
- #如果PID目录不存在,则创建
- if [ ! -d "${pid_path}" ]; then
- mkdir ${pid_path}
- fi
- if [ $# -gt 0 ] ;then
- for regx in $*
- do
- findJar $regx
- done
- else
- findJar "*.jar"
- fi
-
—————————–2023-6-19 更新单体应用自动重启脚本—————————-
一些老项目或简单的单体应用上docker过于浪费资源,因此还是使用脚本自动重启部署比较方便
以下为更新后的重启脚本,更改jar_name为你的jar包名称
1 | !/bin/bash -ilex |
- 本文作者: reiner
- 本文链接: https://reiner.host/posts/e259bd66.html
- 版权声明: 转载请注明出处,并附上原文链接