群晖Docker Jenkins部署应用程序

139 阅读1分钟

接上文:juejin.cn/post/718660…

环境准备

docker安装应用程序环境(ubuntu)

打开docker,选择刚下载的ubuntu映像(双击安装),安装时最重要的一点「端口映射」 需要开放出启动应用端口的映射信息(用于外部访问),我的端口映射如下(docker容器中的应用端口80**,映射到本地的端口1****): image.png

jenkins服务器与应用服务器之间进行免密登陆

  1. 缘由:由于jenkins服务器部署了jenkins,如果jenkins和应用程序部署在同一机器上,会导致应用程序资源不足,因此将jenkins和应用程序分不同机器部署
  2. 原理:jenkins服务器从git上拉取代码之后使用maven插件打包,然后将包上传scp到应用程序服务器,jenkins先ssh连接应用程序服务器,然后scp进行拷贝;所以jenkins服务器需要安装ssh(apt install openssh-server)
  3. 实践:
  • 先登录到jenkins服务器,生成jenkins服务器的密钥,命令(ssh-keygen –t rsa)三连回车直接生成即可,默认放在/root/.ssh目录下,cd到/root/.ssh目录下,cat id_rsa.pub >> authorized_keys
  • 登录到应用程序服务器,创建.ssh目录(mkdir /root/.ssh),增加权限(chmod +700 .ssh),将jenkins服务器中生成的id_rsa.pub拷贝到应用服务器(scp root@jenkins服务器ip:/root/.ssh/id_rsa.pub .),拷贝过来之后,执行命令:cat id_rsa.pub >> authorized_keys
  • 免密登陆设置结束

编辑启动脚本

set -e #任何命令出错就退出
set -o pipefail
APP_ID=youjia
APP_DIR="/data/app"
for element in `ls ${APP_DIR}/${APP_ID}/application`
do 
nohup java -jar ${APP_DIR}/${APP_ID}/application/${element} < /dev/null 
>> ${element}_release_out.log 2>&1 &
start_ok=false
if [[ $? = 0 ]];then
	sleep 3
	tail -n 10 ${element}_release_out.log
	sleep 5
	tail -n 50 ${element}_release_out.log
fi
aaa= ‘grep "Started" release_out.log | awk '{print $1}'’
if [[ -n "${aaa}"]];then
	echo "Application started ok"
	continue
else
	echo "Application started error"
	exit 1
fi
done
echo "启动成功"