环境准备
1. 群晖Docker安装
套件中心 --> 所有套件 --> 搜索docker下载安装
2. Docker下载centos
打开docker,选择注册表,搜索ubuntu(其他的环境也可以,我这里使用的是ubuntu),下载ubuntu,下载完成之后就可以在映像中看到下载的ubuntu了
3. 部署centos容器
打开docker,选择刚下载的ubuntu映像(双击安装),安装时最重要的一点「端口映射」
需要开放出启动jenkins端口的映射信息,我的端口映射如下(docker容器中的jenkins端口80**,映射到本地的端口1****):
jenkins部署工作
jenkins war包部署
使用war部署缘由:由于我使用其他方式安装jenkins都失败了,启动报错(其中包括java版本不对,换成了java11)等问题,当时为了解决问题找了挺多资料但是没有记录问题且最终没有部署成功,因此采用了war包方式来部署,最后成功
- 本地下载jenkins.war成功之后,上传至群晖文件夹下
- 打开docker中安装的ubuntu容器,将jenkins.war拷贝过来(拷贝命令:scp 群晖登录名@群晖ip:群晖中jenkins.war所在的路径 保存到centos文件夹下的路径;回车之后输入群晖登录密码)
- 最后使用: java -jar jenkins.war --httpPort=80** (刚才映射的端口),启动jenkins
- 访问jenkins:http://群晖ip:映射的本地端口/
- 最后就是设置jenkins
碰到的问题:
- 插件下载失败,替换地址多试几次
使用jenkins部署应用
配置插件
- 配置jdk插件
- 配置maven插件
- 配置及git插件
应用发布配置
- 配置源码
- 配置builder,输入clean package -Dmaven.test.skip=true -U
- 配置post builder step,选择execute shell 配置内容如下:
echo "部署的目录和项目名称"
DIR="/data/app"
projectName="项目名"
echo "待部署的应用服务器,可多台"
server_ips="应用程序服务器ip地址" #应用和jenkins部署在不同服务器
for server_ip in ${server_ips[@]}
do
echo "SSH连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} << EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projetName}.jar"]; then
mv $DIR/${projectName}.jar $DIR/backup/${projectName}/${projectName}-data "+%Y%m%d_%H%N%S".jar
fi
EOF
echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/
echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/* $DIR/${projectName}
sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh
EOF
done
echo "success"
碰到的问题: sh指向了dash,修改回bin/bash 后续将更新:
- jenkins服务器与应用服务器之间免密登陆
- jenkins打包然后启动应用及后续碰的问题
jenkins打包完上传到指定应用服务器遇到的问题
应用程序启动成功,无法退出(jenkins一直在等待衍生进程被kill);
解决方案如下:nohup java -jar jar文件 < /dev/null >> ${element}_release_out.log 2>&1 &