51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2501|回复: 0
打印 上一主题 下一主题

[原创] 自动发布系统

[复制链接]
  • TA的每日心情
    奋斗
    2016-2-16 14:03
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2016-2-16 13:39:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    因为是小公司,平时测试或者正式发布版本都是由测试负责,而且公司项目也多,就由此写了一个简单的发布系统。
    发布系统是基于bs结构,这样团队的每个人都可以用这个发布,但是只是局限同时只能发布一个项目,因为自己代码能力也不够,大家可以评论下怎么实现同时发布多个,这样肯定要涉及到多线程了。
    前端实现很简单,用html,css,jquery实现的,如图
    服务端实现也简单,用的是python的flask框架,服务端接收到请求之后,对参数解析后,找到正确执行的发布脚本并执行,然后把打印在终端的执行结果信息反馈到前端,服务端启动没有用守护进程,而是用supervisor进行监控启动着,原理就是这样,因为自己不是做开发的,所以实现的方法也比较笨,很多难题无法优化解决,比如打印在终端的执行结果信息只能重定向到文件,从文件中读取返回到前端;前端请求发布的时候,因为执行发布脚本时间较长,所以浏览器页面一直在请求中,导致异步请求执行日志的结果无法在前端显示,我只能通过打开新的页面展示出来,发布系统是完成了,而且也能正常使用,只是实现的方法比较挫,有经验的可以评论下好的方法,下面贴一下服务端实现的代码:
    1. #!/usr/bin/python
    2. #-*- coding:utf8 -*-

    3. from flask import Flask, request, render_template
    4. from flask_debugtoolbar import DebugToolbarExtension
    5. import os

    6. app = Flask(__name__)

    7. @app.route('/')
    8. def index():
    9.     return render_template('index.html')

    10. @app.route('/issue',methods=['GET','POST'])
    11. def issue():
    12.     os.system('echo '' > /home/svn/flask/nohup.out')

    13.     if request.method == 'GET':
    14.         server = request.args.get('server')
    15.         project = request.args.get('project')
    16.         version = request.args.get('version')
    17.         passwd = request.args.get('passwd')
    18.         way = request.args.get('way')

    19.         if passwd != '***':
    20.             return '发布密码错误'
    21.         if '***' in server:
    22.             '''if 'shuimifang' in project:
    23.                 os.system("/usr/bin/fab -f /home/svn/flask/script/sh-server/shuimifang_issue.py main:"+version+">/home/svn/flask/nohup.out 2>&1")
    24.                 return '发布成功'''
    25.             if 'qxs2o' in project:
    26.                 if way == 'issue':
    27.                     os.system("/usr/bin/fab -f /home/svn/flask/script/sh-server/qxs2o_issue.py main:"+version+">/home/svn/flask/nohup.out 2>&1")
    28.                     return '发布成功'
    29.                 else:
    30.                     os.system("/usr/bin/fab -f /home/svn/flask/script/sh-server/qxs2o_restart.py main")
    31.                     return '重启成功'
    32.             if 'yibao' in project:
    33.                 #os.system("fab -f /home/svn/flask/script/sh-server/yibao_issue.py main:"+version)
    34.                 return '暂不支持自动发布'
    35.             if 'qxqihuo' in project:
    36.                 #os.system("fab -f /home/svn/flask/script/sh-server/qxqihuo_issue.py main:"+version)
    37.                 return '暂不支持自动发布'
    38.         if u'***' in server:
    39.             if 'qxdai' in project:
    40.                 os.system("/usr/bin/fab -f /home/svn/flask/script/aly-server/qxdai_issue.py main:"+version+">/home/svn/flask/nohup.out 2>&1")
    41.                 return '发布成功'
    42.             if 'qianshang' in project:
    43.                 os.system("/usr/bin/fab -f /home/svn/flask/script/aly-server/qianshang_issue.py main:"+version+">/home/svn/flask/nohup.out 2>&1")
    44.                 return '发布成功'
    45.             if 'shuimifang' in project:
    46.                 if way == 'issue':
    47.                     os.system("/usr/bin/fab -f /home/svn/flask/script/aly-server/shuimifang_issue.py main:"+version+">/home/svn/flask/nohup.out 2>&1")
    48.                     return '发布成功'
    49.                 else:
    50.                     os.system("/usr/bin/fab -f /home/svn/flask/script/aly-server/shuimifang_restart.py main")
    51.                     return '重启成功'
    52.         if u'测试服务器' in server:
    53.             return '暂不支持自动发布'

    54. if __name__ == '__main__':
    55.     app.run(debug=True, host='192.168.16.17', port=5000)
    复制代码
    以上是发布程序,在贴一下发布脚本执行信息反馈到前端的代码:
    1. #!/usr/bin/python
    2. #-*- coding:utf8 -*-

    3. from flask import Flask, request, render_template
    4. from flask_debugtoolbar import DebugToolbarExtension
    5. import os
    6. import requests

    7. app = Flask(__name__)

    8. fp = open('/home/svn/flask/nohup.out','r')

    9. @app.route('/')
    10. def index():
    11.     return render_template('index-log.html')

    12. @app.route('/log',methods=['GET','POST'])
    13. def log():
    14.     global fp

    15.     if request.method == 'GET':
    16.         ret = fp.readline()
    17.        
    18.         if 'Disconnecting from' in ret:
    19.             fp.close()
    20.             fp = open('/home/svn/flask/nohup.out','r')
    21.         return ret

    22. if __name__ == '__main__':
    23.     app.run(debug=True, host='192.168.16.17', port=5001)
    复制代码
    以上就是完整的发布系统了,发布的脚本各公司各异就不贴了,以上程序能执行基本功能,但是有很多小问题,大家可以评论


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 03:08 , Processed in 0.065233 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表