利用jenkins监听SVN设计稿的更新内容
首先需要创建一个jenkins任务,由于我们公司的UI设计稿是采用SVN来管理,在UI的同学和开发的同学经常在沟通方面不及时的问题,于是我想办法写了这个钩子。
主要用到的shell如下,当前前提还是需要先创建一个jenkins的任务配置好svn的地址和账号信息等内容,拉取到固定的SVN内容文件夹。
cd ${WORKSPACE}
rm -rf result.xml
svn upgrade
svn log -l 1 --trust-server-cert --username SVN用户名 --password SVN密码 --xml >>result.xml
cat result.xml
python /Users/zhangyuqing/Workspace/svn.py ${WORKSPACE}/result.xml
这里的核心内容用到了一个python脚本来处理,下面是svn.py的内容代码。代码如下:
#!/usr/bin/python
# encoding=utf8
# -*- coding: UTF-8 -*-
import sys
import commands
import os
from xml.dom.minidom import parse
import xml.dom.minidom
import memcache
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
######################发送邮件###########################
def send_Email(reversion,date,emailMsg):
# 邮件接受者
mail_receiver = ['xxxxx@xxxx.com']
# 根据不同邮箱配置 host,user,和pwd
mail_host = 'SMTPHost'
mail_user = ''
mail_pwd = ''
mail_to = ','.join(mail_receiver)
msg = MIMEMultipart()
environsString = '<h3>XXXXXX项目UI设计稿更新了.</h3><br/>'
environsString += '最新版本:' + str(reversion) + '<br/>'
environsString += '更新日期:' + str(date) + '<br/>'
environsString += '更新日志:' + str(emailMsg) + '<br/>'
message = environsString
body = MIMEText(message, _subtype='html', _charset='utf-8')
msg.attach(body)
msg['To'] = mail_to
msg['from'] = mail_user
msg['subject'] = 'XXXXX项目UI设计稿更新了'
try:
# s = smtplib.SMTP()
s = smtplib.SMTP_SSL()
s.connect(mail_host)
# s.starttls()
s.login(mail_user, mail_pwd)
s.sendmail(mail_user, mail_receiver, msg.as_string())
s.close()
print 'success'
except Exception, e:
print e
######################正文开始###########################
reload(sys)
sys.setdefaultencoding('utf8')
paramsCount = len(sys.argv)
if (paramsCount != 2):
print "本文件只支持以下的1个参数同时配置,缺一不可"
print "第一个参数:描述文件的路径"
exit()
logPath=sys.argv[1]
print 'params is:' + logPath
# 使用minidom解析器打开 XML 文档
DOMTree = xml.dom.minidom.parse(str(logPath))
collection = DOMTree.documentElement
allChildNodes = collection.childNodes
reversion = 0
date = ''
svnmsg = ''
for childNode in allChildNodes:
if str(childNode.nodeName) == 'logentry':
reversion = childNode.getAttribute('revision')
for tempChildNode in childNode.childNodes:
if str(tempChildNode.nodeName) != '#text':
# print tempChildNode.nodeName
textNode = tempChildNode.childNodes[0]
# print textNode.data
if tempChildNode.nodeName == 'date':
date = textNode.data
elif tempChildNode.nodeName == 'msg':
svnmsg = textNode.data
print reversion
print date
print svnmsg
conn = memcache.Client(['127.0.0.1:11211'])
latestReversion = conn.get('BWCMTUIlatestReversion')
print latestReversion
if latestReversion is None:
conn.set('BWCMTUIlatestReversion',reversion) ##写入数据
print '第一次写入 latestReversion'
elif str(latestReversion) != str(reversion):
print '有新的数据来了'
conn.set('BWCMTUIlatestReversion', reversion) ##写入数据
send_Email(reversion,date,svnmsg)
然后通过jenkins的定时轮询任务就可以实现自动监听SVN的设计稿状态了,从此也就解决了垮团队之间的沟通问题。