使用 jenkins 自动化部署应用(写给新手的)
jenkins官网: https://jenkins.io/
jenkins.war 的下载地址
链接:https://pan.baidu.com/s/1fhlnxpkQwwkIzurGdrqEiA
提取码:nn32
准备环境
- linux 服务器一台 (version: 7.4 ,bit: 64)
- 服务器安装好 JDK (version: 1.8 ,bit: 64)
- 服务器安装好 tomcat (version: 8.0.52)
- 服务器安装好 maven (version: 3.5.0)
- 服务器安装好 svn / git (两个选一个安装,我这里以svn为例)
- 将下载好的 jenkins.jar 放到 ./tomcat/webapps/ 目录下,并启动 tomcat (jenkins.war可以去官网下)
请保证上述环境都已准备完毕…
登录jenkins
启动 tomcat 后,在浏览器输入:localhost:8080/jenkins (我的tomcat使用的是 8080 端口)
jenkins第一次启动时会将密钥存在一个文件中,当第一次登录时,需要进行验证。我们将页面中提示的路径打开,将里面的内容填入图中的文本框中,然后我们点 Continue
初始化中,让子弹飞一会~
这个页面提示你安装一些插件,左边是 jenkins 推荐安装的插件,右边是告诉你可以自已选择哪些装。
Tips: 如果没有特别要求,可以选择左边的窗口,后期需要安装其它插件的话,也可以再到 jenkins 页面安装
楼主这里选择左边 jenkins 推荐的一些插件,如图上,正在安装中…
Tips: 这个过程需要联网!
创建一个超级管理员用户,信息请自行填写。Tips: 后续登录 jenkins需要使用到的登录信息
访问 jenkins 的路径配置,如果无特殊要求,默认就好。
jenkins 已经准备就绪,我们点 start using jenkins 就可以看到它的管理界面了
安装Maven插件
jenkins第一次创建 maven项目,需要先安装maven插件,否则在创建项目的时候没有 构建Maven项目 这一选项
在主页面选择 系统管理,再选择 插件管理
在输入框中输入:Maven Integration,勾选,并安装它
配置全局环境
在主页面选择 系统管理,再选择 全局工具配置,我们进行,jdk、maven 的配置
以下配置的路径全都是服务器该软件的安装路径,请不要配置错
创建一个maven项目
在主页面选择 New任务,开始创建一个项目,并在弹出的页面方框中输入你的项目名称,输入名称后,我们选择 “构建maven项目”,点 OK,进入下一步。
简单的说一下,如何让当前项目与你 svn 或 git 上的代码进行关联
- 在下图中选择 Git 或 Subversion (我以svn为例,git差不多)
- Repository URL 中 输入你的代码地址
- Credentials 是拉这个代码需要的账号和密码,点击右边的 Add可以添加(只需要输入username 和 password 这两项就行了)
这里不得不提一下 Build Triggers,有时候项目需要自动触发,比如说提交代码后触发、定时触发等等,都需要在这里配置。
这里留个todo,有时间我一定会补上!
指定项目的构建信息
- Root POM 指定项目的 pom.xml 的路径
- Goals and options 指定构建时所附加的参数
clean install -Pprod -Dmaven.test.skip=true
clean install 是maven的常用命令,不再解释
-P 是指定启动的环境,我所指定的是prod,表示加载 application-prod.yml 里面的配置(多配置前面博客中有提到)
-Dmaven.test.skip 指在编译、打包时不执行测试用例,也不编译测试用例类
- 1
- 2
- 3
- 4
执行自定义的脚本
jenkins 把项目构建完成后,生成的 war/jar会在 /root/.jenkins/workspace/项目名/项目名/target/ 目录下,我们利用命令将 war/jar 复制到指定目录下,然后执行 sheel脚本进行发布
BUILD_ID=DONTKILLME
cp /root/.jenkins/workspace/offline-app-order/offline-app-order/target/offline-app-order-1.0-SNAPSHOT.jar /usr/local/projects/offline-app-order/application-temp.jar
sh /usr/local/projects/offline-app-order/run-app.sh
- 1
- 2
- 3
第一行:防止 jenkins 构建完成后杀掉 sheel 进程,导致自动部署失败
第二行:将 jenkins 打的包复制到服务器的 指定位置,并重命名为 application-temp.jar
第三行:执行一个自己写好的 sheel 脚本(此脚本完成杀进程,重启进程的工作) - 该脚本放在本文的最后!
- 1
- 2
- 3
重要:配置完成后,点击 Save 将所有配置进行保存!
构建项目
上面的操作完成后,在主页可以看到刚创建好的项目,我们点这个项目名称,进入项目详情
点击 立即构建 按钮,开始构建项目
构建开始时,可以在左下角看到条目,也可以点开条目,看构建日志
- 红色圆圈:构建失败
- 蓝色圆圈:构建没问题,脚本执行也没问题,但是不保证项目能启起来 (说不定有其它服务器问题)
查看构建日志(无论怎么构建失败的,都可以进去看日志,日志里面会写的很详细)
最后,分享一个我服务器上的脚本(run-app.sh)
#!/bin/sbin
present_time=`date +%Y%m%d%H%M%S`
echo "current time: ${present_time}"
temp_jar_name=application-temp.jar
normal_jar_name=offline-app-order.jar
jar_path=/usr/local/projects/offline-app-order/
log_file=/usr/local/projects/offline-app-order/logs/application-run.log
LANG=UTF-8
echo "=============== publish =============="
echo "step 1: stop application"
pid=`ps -ef | grep ${normal_jar_name} | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
echo "kill -9 ${normal_jar_name}, pid is: ${pid}"
kill -9 $pid
fi
echo "step 2: backup application"
#mv ${jar_path}/${normal_jar_name} ${jar_path}/${normal_jar_name}-${present_time}
rm -rf ${jar_path}/${normal_jar_name}
echo "step 3: replace application-temp.jar to application.jar"
mv ${jar_path}/${temp_jar_name} ${jar_path}/${normal_jar_name}
cd ${jar_path}
echo "step 4: chmod application"
if [ -f "${normal_jar_name}" ]
then
echo "chmod 777 to ${normal_jar_name}"
chmod 777 ${normal_jar_name}
fi
cd ${jar_path}
echo "step 5: start application"
nohup java -jar ${normal_jar_name} > ${log_file} 2>&1 &
echo "publish is ok"
#echo "nohup java -jar ${normal_jar_name} > ${log_file} 2>&1 &"