一、解决重复部署的问题
1.概念
- 每一次部署都有个部署id保存在: GIT_COMMIT
- 上一次成功部署的id保存在: GIT_PREVIOUS_SUCCESSFUL_COMMIT
2.部署脚本
```!/bin/bash
git_version=v0.0.1
Date=$(date +%Y-%m-%d-%H-%M-%S) Name=${Date}-${git_version} Source_tar_dir=/opt/webWORKSPACE=/home/jenkins/workspace/haonongren
Server=192.168.100.10 Dist_dir=/home/code
打包项目函数
tar_code(){
cd $WORKSPACE
mkdir -p $Source_tar_dir
rm -rf $Source_tar_dir/*
tar -czf $Source_tar_dir/$Name ./*
}
拷贝项目函数
scp_code(){ ssh root@$Server “mkdir -p $Source_tar_dir && rm -rf $Source_tar_dir/* “ scp $Source_tar_dir/${Date}-${git_version} root@$Server:$Source_tar_dir ssh root@$Server “ rm -rf ${Dist_dir}/${Date}-${git_version} ${Dist_dir}/web &&mkdir -p ${Dist_dir}/${Date}-${git_version} &&tar -xf $Source_tar_dir/${Date}-${git_version} -C ${Dist_dir}/${Date}-${git_version} && ln -s ${Dist_dir}/${Date}-${git_version} ${Dist_dir}/web” }
执行部署函数
deploy(){ tar_code scp_code }
执行回滚函数
rollback (){
#ssh root@$Server "rm -rf ${Dist_dir}/web "
echo "你执行了回滚"
}
精华在这里判断执行步骤####################################注意这里处理了,防止重复部署
if [ $deploy_env == ‘deploy’ ];then if [ $GIT_COMMIT == $GIT_PREVIOUS_SUCCESSFUL_COMMIT ];then echo “你已经部署过!!” exit 1 else deploy fi elif [ $deploy_env == ‘rollback’ ];then rollback else echo “输入错误,请选择部署或者回滚”
fi
<a name="NuktX"></a>
# 二、解决回滚的问题(回滚就是删掉软连接,并软连接到上一个版本)
!/bin/bash
Date=$(date +%Y-%m-%d-%H-%M-%S) Name=${Date}-${git_version} Source_tar_dir=/opt/web Server=192.168.100.10 Dist_dir=/home/code
打包项目函数
tar_code(){
cd $WORKSPACE
mkdir -p $Source_tar_dir
rm -rf $Source_tar_dir/*
tar -czf $Source_tar_dir/$Name ./*
}
拷贝项目函数
scp_code(){ ssh root@$Server “mkdir -p $Source_tar_dir && rm -rf $Source_tar_dir/* “ scp $Source_tar_dir/${Date}-${git_version} root@$Server:$Source_tar_dir ssh root@$Server “ rm -rf ${Dist_dir}/${Date}-${git_version} ${Dist_dir}/web &&mkdir -p ${Dist_dir}/${Date}-${git_version} &&tar -xf $Source_tar_dir/${Date}-${git_version} -C ${Dist_dir}/${Date}-${git_version} && ln -s ${Dist_dir}/${Date}-${git_version} ${Dist_dir}/web” }
执行部署函数
deploy(){ tar_code scp_code }
执行回滚函数
rollback (){
获取版本代码包
########注意精华在于find ${Dist_dir}/* -maxdepth 1 -type d |grep “${git_version}””##找出需要回滚的版本的路径
code_file=$(ssh root@$Server "find ${Dist_dir}/* -maxdepth 1 -type d |grep "${git_version}"")
ssh root@$Server "rm -rf ${Dist_dir}/web && ln -s $code_file ${Dist_dir}/web"
}
判断执行步骤
if [ $deploy_env == ‘deploy’ ];then if [ $GIT_COMMIT == $GIT_PREVIOUS_SUCCESSFUL_COMMIT ];then echo “你已经部署过!!” exit 1 else deploy fi elif [ $deploy_env == ‘rollback’ ];then rollback else echo “输入错误,请选择部署或者回滚”
fi
```