一、解决重复部署的问题

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/web

    WORKSPACE=/home/jenkins/workspace/haonongren

    Server=192.168.100.10 Dist_dir=/home/code

打包项目函数

tar_code(){

  1. cd $WORKSPACE
  2. mkdir -p $Source_tar_dir
  3. rm -rf $Source_tar_dir/*
  4. 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 (){

  1. #ssh root@$Server "rm -rf ${Dist_dir}/web "
  2. 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

  1. <a name="NuktX"></a>
  2. # 二、解决回滚的问题(回滚就是删掉软连接,并软连接到上一个版本)

!/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(){

  1. cd $WORKSPACE
  2. mkdir -p $Source_tar_dir
  3. rm -rf $Source_tar_dir/*
  4. 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}””##找出需要回滚的版本的路径
  1. code_file=$(ssh root@$Server "find ${Dist_dir}/* -maxdepth 1 -type d |grep "${git_version}"")
  2. 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

```