zhanghong 发表于 2018-1-8 19:02:44

Jenkins08,Jenkins纳入版本控制

#!/bin/bash  

  
#Jenkins的Subversion备份脚本
  
#请将本脚本放到JENKINS_HOME目录
  
#作者:zjl
  
#version:2.0
  
#time:2014-01-07 18:36
  
#
  

  

  

  
#获取当前系统时间
  
DATE=`date "+%Y%m%d"`
  

  
SVN_HOME=/home/froad/svn
  

  
JENKINS_HOME=/home/froad/jenkins
  

  
#日志文件
  
LOG_HOME=/root/.subversion/logs
  

  
LOG_FILE=${LOG_HOME}/svn_commit_${DATE}.log
  

  
TMP_STATUS_LOG=${LOG_HOME}/status.log
  

  

  
echo " 当前时间:`date "+%Y%m%d_%H%M%S"`" >>${LOG_FILE}
  

  
if [ ! -d "${LOG_HOME}" ];then
  

  mkdir -p ${LOG_HOME}
  
fi
  

  
#进入到svn工作目录,防止出现稀奇古怪的错误
  
cd ${JENKINS_HOME}
  

  
function svn_add()
  
{
  

  #使用svn add命令将文件添加到版本控制
  ${SVN_HOME}/bin/svn add${JENKINS_HOME}/*--username=jenkins--force &>>${LOG_FILE}
  #退出码
  EXIT_NUM=$?
  

  echo "svn add退出码:${EXIT_NUM} !" >>${LOG_FILE}
  
}
  

  

  

  
function svn_status()
  
{
  

  #使用svn status命令判断文件是否删除、修改或者其他操作
  ${SVN_HOME}/bin/svn status"/${JENKINS_HOME}" > ${TMP_STATUS_LOG}
  

  #循环从文件中读取一行
  cat ${TMP_STATUS_LOG} | while read line;do
  

  #获取第一个字符,根据第一个字符判断情况
  l=`echo ${line}|cut -c1`
  

  #状态为A(增加)时,不需要任何操作,直接返回。
  if [ "${l}" == "A"];then
  continue
  fi
  

  #状态为D(删除)时,不需要任何操作,直接返回。
  if [ "${l}" == "D"];then
  continue
  fi
  

  #状态为M(修改)时,不需要任何操作,直接返回。
  if [ "${l}" == "M"];then
  continue
  fi
  

  #状态为?(未受控制)时,调用add命令然后返回。ps:不知道怎么的有时候从文件中读取回来的?变成了0
  if [ "${l}" == "0" ] || [ "${l}" == "?"];then
  ${SVN_HOME}/bin/svn add"${JENKINS_HOME}/`echo ${line} | cut -d ' ' -f 2- `" >>${LOG_FILE}
  continue
  fi
  

  #状态为!(丢失或者不完整)时,调用delete命令然后返回。
  if [ "${l}" == "!"];then
  

  ${SVN_HOME}/bin/svn delete "${JENKINS_HOME}/`echo ${line} | cut -d ' ' -f 2- `" >>${LOG_FILE}
  continue
  fi
  

  echo "其他情况:"${line} >>${LOG_FILE}
  done
  #删除临时文件
  rm -rf ${TMP_STATUS_LOG}
  

  
}
  

  

  
function svn_commit()
  
{
  

  #使用svn commit命令提交到服务器
  ${SVN_HOME}/bin/svn commit ${JENKINS_HOME}/*--message="crontab commit" --username=jenkins &>>${LOG_FILE}
  

  EXIT_NUM=$?
  

  if [ ! ${EXIT_NUM} == "0" ];then
  

  echo "退出码:${EXIT_NUM} svn commit失败,请查看日志!">>${LOG_FILE}
  return
  

  fi
  echo "svn commit退出码:${EXIT_NUM} !">>${LOG_FILE}
  
}
  

  
#调用方法
  
svn_add
  
svn_status
  
svn_commit
  

  
echo " 当前时间:`date "+%Y%m%d_%H%M%S"`" >>${LOG_FILE}
  

  
#输出空行隔离
  
echo>>${LOG_FILE}
页: [1]
查看完整版本: Jenkins08,Jenkins纳入版本控制