Jenkins一键部署思路与实现
-
从版本管理工具(SVN、Git)拉取最新代码到中间服务器(Jenkins服务器)
-
代码在中间服务器编译打成war包
-
把war包复制到目标服务器临时位置
-
将临时位置的war包利用 .sh 脚本复制到指定的tomcat下 并启动服务
目标服务器是指 : war包运行的服务器
部署Java
1、新建任务
在Jenkins控制台新建任务,输入新建的任务名称,然后选择“构建一个自由风格的软件项目”,点击OK。
2、实现部署
2.1、Generl
不进行操作
2.2、源码管理
选择Subversion
Repository URL : SVN的地址@HEAD @HEAD获取最新本版代码
Credentials :凭证,赋予访问SVN仓库的用户
Local module directory :选填
2.3、构建触发器
不进行操作
2.4、构建环境&构建
clean package -Dmaven.test.skip=true 打包并且跳过测试
此时已经在中间服务器中将拉取的文件打成war包。
2.5、构建后操作
选择 Send build artifacts over SSH
配置 SSH Server
Name : 使用的服务器 ,在系统管理-> 系统设置 -> SSH Server 点击增加配置
Name : 名称
Host Name : 主机地址
UserName : 使用的根地址
Remote Directory : 服务目录 de 地址
点击“高级”设置服务器密码 链接的端口号 以及超时时间等信息 点击Test Configuration 测试链接
上述几个地址就构成接下来操作的根路劲
Transfers :
Source files : 源文件 指本次任务中在中间服务器的war包位置
通常使用:
**/*.war
Remove Prefix : 删除前缀 不填
Remote directory : 远程目录 是指 将中间服务器的war包复制到目标服务器指定的临时位置
Exec command :执行的 .sh 脚本文件的地址
点击保存
3、附: sh 文件
#!/bin/bash
export JAVA_HOME=/home/software/jdk/jdk1.8.0_162
rm -rf /tomcat/tomcat-9-plan-report/webapps/ROOT.war
rm -rf /tomcat/tomcat-9-plan-report/webapps/ROOT/
rm -f /tomcat/tomcat-9-plan-report/logs/*
cp /tomcat/jenkins_files/planreport-online-war/PlanReport/target/ROOT.war /tomcat/tomcat-9-plan-report/webapps/
rm -rf /tomcat/jenkins_files/tomcat-9-plan-report/*
cd /tomcat/tomcat-9-plan-report/bin/
TOMCAT_PATH=/tomcat/tomcat-9-plan-report/bin
echo "TOMCAT_PATH is $TOMCAT_PATH"
PID=`ps aux | grep /tomcat/tomcat-9-plan-report/bin | grep java | awk '{print $2}'`
if [ -n "$PID" ]; then
echo "Will kill tomcat: $PID"
sh "$TOMCAT_PATH/shutdown.sh"
sleep 6
else echo "No Tomcat Process $PID"
fi
PID2=`ps aux | grep /tomcat/tomcat-9-plan-report/bin | grep java | awk '{print $2}'`
if [ -n "$PID2" ]; then
kill -9 $PID2
echo "Try to kill $PID2"
else echo "No Tomcat Process $PID2"
fi
sh "$TOMCAT_PATH/startup.sh"
sleep 3
PID=`ps aux | grep /tomcat/tomcat-9-plan-report/bin | grep java | awk '{print $2}'`
if [ -n "$PID" ]; then
echo "
Restart tomcat successfully!"
else
echo "
Fail to startup tomcat"
exit 1
fi
解析:
3.1、删除tomcat下webapps下的文件和日志
3.2、复制文件
3.3、删除临时位置的war文件
3.4、进入tomcat的bin下
3.5、得到进程号
3.6、将进程杀掉 并停掉tomcat
3.7、启动tomcat。
部署JS
基本同上
不同点:
1、 构建环境不选
2、构建选择“执行shell”
echo $PATH
node -v
npm -v
cd code
npm install
npm run testbuild
3、看图
部署时可能遇见的问题:
SSH: Connecting from host [jenkins]
SSH: Connecting with configuration [167] ...
SSH: EXEC: STDOUT/STDERR from command [/home/jenkins_file/planreport_online-deply.sh] ...
bash: /home/jenkins_file/planreport_online-deply.sh: Permission denied
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [167] ...
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [126]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
Finished: UNSTABLE
jenkins自动化构建时,执行远程SSH时,返回错误状态码 126.
原因: 对应的.sh 脚本权限不足,修改需执行的脚本权限即可、
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
发布时,异常消息[Exec退出状态不为零。状态1.
原因:未知,解决:再次部署一遍、
-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory
原因:在window下创建的文件,后将后缀修改为.sh,因此在Linux系统中会出现文件的格式是dos,只要将文件格式修改为unix就OK了
具体操作步骤
1、查看文件格式 用vim 打开出错的文件 按 ESC键 再按shift+冒号 输入 set ff 回车 可以看见 该文件的格式 fileformat=dos
2、按shift + 冒号 输入 set ff=unix 回车 发现没反应,那就对了。
3、可以按 shift + 冒号 set ff 查看 fileformat=unix