最近又重新弄了一下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 系统管理->插件管理 点击available(可选插件)选项卡 ,在右上角的搜索框搜索并安装如下几个插件:
1、Git plugin Git client plugin
2、Maven Integration plugin
3、Publish Over SSH
4、Gitlab Hook Plugin(可选)
再次点击JENKINS的系统管理 -> 系统设置 ,找到Publish over SSH这一栏,如下图配置要发布到该服务器上的连接配置
参数说明:
name:可以随便起 hostname:连接IP地址 Remote Directory: 远程文件夹路径,发布的项目将会在此目录下
username:账号 password:密码 , 除了用账号密码连接外还可以通过private key连接,由于麻烦我在这选择了账号密码连接
这个是基础配置,可不能忘了,分别配置它的JDK GIT 和MAVEN,如果本机已经有了,则输入安装路径即可,如果没有可以使用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!
这个脚本调了我很久,一开始不是没执行完就结束要么就是启动没反应,该脚本的大致作用是查找该目录下的所有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