一、简介
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.安装推荐的插件时,会卡在那里很久,解决办法网上很多。可以参考 Jenkins安装插件很慢
五、配置和使用
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.立即构建