利用jenkins监听SVN设计稿的更新内容

作者: shaneZhang 分类: 互联网技术 发布时间: 2019-05-15 14:03

首先需要创建一个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的设计稿状态了,从此也就解决了垮团队之间的沟通问题。

如果觉得我的文章对您有用,请随意打赏。如果有其他问题请联系博主QQ(909491009)或者下方留言!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注