抛出问题
为啥不用jenkins部署?
ds可以用jenkins部署吗?那肯定是可以的,那我们为啥不用jenkins部署呢?
• 消耗jenkins机器性能。ds依赖包比较多,打包的时候会将所有的包打进tar.gz文件,而我们实际开发中,基本不需要替换除了dolphinscheduler相关包之外的其他包,每次重新打包非常消耗jenkins机器性能;
• DS服务器和jenkins服务器存在连通性问题。DS服务器和jenkins服务器不能都做免密,服务器密码又不好写在shell脚本中,存在安全性问题;
于是决定使用脚本部署,通过执行脚本达到一键升级效果。
脚本内容执行步骤
- 进入到项目目录;
- 切换分支;
- 拉取最新代码;
- maven打包DS项目,获取tar.gz;
- 解压tar.gz包;
- 如果是同时需要DSjar,不需要部署,则使用mv命令直接移动ds jar到指定位置;
- 如果需要部署到指定机器,先scp ds jar到指定服务器的指定目录;
- 连接远程机器,并重启DS服务
脚本代码
package.sh
#!/bin/bash
ds_dir=$1
branch=$2
echo ds项目路径:$ds_dir
cd $ds_dir
# git拉取最新代码
git checkout $branch
git pull
# maven打包ds
mvn -U clean package -Prelease -Dmaven.test.skip=true -Dmaven.javadoc.skip=true
cd $ds_dir/dolphinscheduler-dist/dolphinscheduler-backend/target
# 解压tar.gz包
tar -zxvf apache-dolphinscheduler-incubating-1.2.1-SNAPSHOT-dolphinscheduler-backend-bin.tar.gz
local_upgrade.sh
#!/bin/bash
remote=$1
remote_dir=$2
branch=$3
echo 远程机器地址:$remote:$2
# ds项目目录
ds_dir=/xxx/xxx/deepexi-daas-dolphinscheduler
# 打包ds项目,并解压
sh package.sh $ds_dir $branch
# 移动ds jar到指定位置
# target_dir=~/script/ds/
# mv $ds_dir/dolphinscheduler-dist/dolphinscheduler-backend/target/apache-dolphinscheduler-incubating-1.2.1-SNAPSHOT-dolphinscheduler-backend-bin/lib/dolphinscheduler* $target_dir
# 传输ds jar到远程机器
scp $ds_dir/dolphinscheduler-dist/dolphinscheduler-backend/target/apache-dolphinscheduler-incubating-1.2.1-SNAPSHOT-dolphinscheduler-backend-bin/lib/dolphinscheduler* root@$remote:$2/lib
ssh root@$remote "su dolphinscheduler -c 'sh $2/bin/stop-all.sh; sleep 5; sh $2/bin/start-all.sh; exit'"
exit
执行示例:
sh local_upgrade.sh 192.168.0.1 /data/dolphinscheduler dev