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]