一、简介
java语言开发,用于监控持续重复的工作,包括:持续的软件版本发布/测试项目,监控外部调用执行的工作。
Jenkins中文网:http://www.jenkins.org.cn/
Jenkins官网:https://www.jenkins.io/zh/
二、自动化部署原理
如图,Jenkins把一系列步骤串到一起实现自动化。
三、依赖工具
1.git
拉取代码需要git,***注意安装完要生成公钥添加到代码服务器***
2.maven
编译打包需要
3.jdk
Jenkins是Java语言开发,需要Java环境
四、安装
安装方法和步骤网上很多,官网也有,针对自己的服务器系统(win、mac、Linux)选择即可。这里不再赘述,只说几个注意点
1.安装后的初始密码位置:/var/lib/jenkins/secrets/initialAdminPassword
cat /var/lib/jenkins/secrets/initialAdminPassword
2.默认构建目录:/var/lib/jenkins/workspace
每个任务都可以具体设置
3.修改Jenkins配置文件:/etc/sysconfig/jenkins ,使用 root账户运行,否则会出现权限问题 JENKINS_USER="root"
4.安装推荐的插件时,会卡在那里很久,解决办法网上很多。
五、配置和使用
1.全局工具
maven、git
2.插件管理
git plugin、publish over ssh 原则是需要什么安装什么
3.系统配置
系统管理->系统配置->Publish over SSH
publish over ssh :远程部署,即Jenkins所在服务器通过ssh连接到应用服务器,上传jar包,执行脚本。这一步要提前配置后面要用
4.新建任务
配置如下:
a、构建一个maven项目
b、源码管理:
选择git、设置 repositories URL、Credentials(证书)选择无,因为我是通过Jenkins服务器生成公钥添加到代码管理平台、指定分支
c、pre steps:
构建前的动作,比如 切换到构建目录,清理旧构建
#!/bin/bash
cd /opt/workspase/minapp
mvn clean
d、build:
设置自定义工作目录,因Jenkins服务需要执行多个项目的构建 ,最好分别建立目录以区分
e、post steps:
执行shell,拷贝jar部署
注:本步骤是可选,如果应用服务器和Jenkins在一个服务器上,即本地部署
shell脚本demo:
#!/bin/bash
#export BUILD_ID=dontKillMe避免被Jenkins杀掉。
export BUILD_ID=dontKillMe
#找到jar包
cd /opt/workspase/minapp/guanyu-server/guanyu-server-minapp/target
pwd
jarName=$(find guanyu-server-minapp*.jar)
echo "本次更新的包名----${jarName}----"
#拷贝
cp -f ${jarName} /root/servers/
#切换目录
cd /root/servers/
PID=`ps -aux | grep guanyu-server-minapp | grep -v grep | grep -v deploy | awk '{print $2}'`
echo " ---旧进程PID:${PID}--"
if [ -n "$PID" ];
then
echo "杀死旧的进程……"
sleep 2
kill -9 $PID
else
echo "无旧服务……"
fi
echo "开始启动……"
chmod +x ${jarName}
nohup java -jar ${jarName} --spring.profiles.active=test &
f、构建后操作:
增加构建后操作步骤:Send build artifacts over SSH
source files :需要上传的jar包位置(相对于自定义的工作空间)
remove prefix: source files里jar包名以外的部分
remote directory:jar包上传到远程服务器的目录(继承ssh servers的remote directory,即真实上传目录为:ssh servers的remote directory+此处的remote directory)
exec command:远程服务器执行的shell脚本
高级里 exec in pty 选项要勾选,否则可能会报错
shell脚本:
#!/bin/bash
#加载环境变量,否则有些服务器无法执行java
source /etc/profile
BASEDIR=/home/microservice/middleplatform_8980
newJar="corn-middleplatform-dataservice-0.0.1-SNAPSHOT.jar`date +"%Y-%m-%d-%H:%M:%S"`"
#备份
cd $BASEDIR
mv corn-middleplatform-dataservice-0.0.1-SNAPSHOT.jar ${newJar}
#移动
mv /home/microservice/temp/corn-middleplatform-dataservice-0.0.1-SNAPSHOT.jar corn-middleplatform-dataservice-0.0.1-SNAPSHOT.jar
#启动
if [ -f "$BASEDIR/pid" ];then
pid=$(cat $BASEDIR/pid)
echo "进程号为:$pid"
kill -9 $pid && rm -rf $BASEDIR/pid
echo "服务关闭成功!"
fi
sleep 2
nohup java -jar corn-middleplatform-dataservice-0.0.1-SNAPSHOT.jar --meritdata.cloud.log.path=./logs --meritdata.cloud.log.level=debug --meritdata.cloud.log.consoleLevel=info --spring.cloud.zookeeper.connect-string=47.93.8.23:2181 --server.port=8980 --spring.profiles.active=test --spring.redis.host=119.3.254.222 --spring.redis.port=6379 --spring.redis.password=gy88623277 > middleplatform.log 2>&1 &
echo $! > $BASEDIR/pid
#tail -f $BASEDIR/middleplatform.log
sleep 5
5.立即构建