git+jenkins/hudson+python构建环境
来源:互联网 发布:微商怎么上淘宝找货源 编辑:程序博客网 时间:2024/06/09 22:44
转载自:http://my.oschina.net/lanybass/blog/61397
环境准备
要能做好持续整合,首先就要先准备好 CI 服务器。这个服务器的环境,要尽可能接近上线系统的环境;这样我们在做完建置和测试并发布程序后,才能确保它在正式上线时不会出问题。
CI 服务器也需要能够执行 Java ,因为接下来提到的 CI 平台软件需要透过 Java 来执行,所以也请大家先在 CI 服务器上安装好 JDK 。
JDK安装
先下载JDK1.6
我选择安装在/opt目录里
装好之后,添加环境变量:
vi /etc/profile
在 export PATH USER ..... 这句代码之前添加以下代码
#=================JAVA_HOME=/opt/jdk1.6.0_27PATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOME PATH CLASSPATH#=============
然后 source /etc/profile
还有我们也需要GIT。
CI 平台
CI 服务器最重要的角色就是 CI 平台了,两个较为有名的 CI 平台: CruiseControl 及 Hudson 。而在多方比较及网络上前辈的推荐之下,我选择了 Hudson 这个建置容易而且设定也容易的 CI 平台。
因为 Oracle 申请了 Hudson 的商标,让 Hudson 开发者决定把名称改为 Jenkins;
这里提供两种安装及执行的方式:
一、透过支持 Servlet 的 Web Container 执行:
- 安装支持 Servlet 的 Web Container (例如 Apache Tomcat) 。
- 下载最新版 jenkins.war 地址:http://mirrors.jenkins-ci.org/war/latest/jenkins.war。
- 将 jenkins.war 放在 webapps 目录中并启动服务器。
- 在浏览器上开启网址 http://127.0.0.1:8080/jenkins 看到 jenkins 的起始画面时即安装成功。
二、 不使用容器,直接执行
在OPT下建立 jenkins目录,chown将目录拥有者改为当前桌面用户,将jenkins.war 放进去,然后建立一个启动脚本start.sh
vi start.sh: 写入: nohup java -jar jenkins.war --httpPort=8080 &
另其可执行: chmod 755 start.sh
然后就可以启动了: ./start.sh
关闭时:ps aux|grep java 找到当前进程 kill掉
注意:如果当前有任务正在构建中,而你不愿意等到构建结束就想kill,请先进入 系统管理->准备关机,然后再kill
启动jenkins之前请确定启动jenkins的账号能够访问远程git
初始化设置: 1.进入 “系统管理”->“系统设置”
找到 “JDK 安装” -> 新增 ->去掉 自动安装的勾 -> 别名随便(如 jdk1.6) -> java_home填你自己的
加入 Plugin 安装好 Jenkins 后,其实它并不能马上为我们工作,因为我们必须先安装一些必要的 Plugin 才行。
在「 Manage Hudson (管理 Jenkins ) 」的画面上选择「Manage Plugins (管理插件) 」,并点选「 Available (有效的) 」页签 ;接着找到以下 plugin ,勾选后按下最下方的「 Install (安装) 」。
GIT plugin
Violations
Cobertura Plugin
envinject Plugin
安装最后一个插件时,勾选 “当安装成功并且没有运行中的任务时重启Jenkins”来使插件生效
如果连接插件库失败则插件列表就是一篇空白,就只好手工下载插件然后在“高级”里面传上去安装
插件镜像地址: http://mirrors.jenkins-ci.org/plugins/ 我们上面的几个插件:1.http://mirrors.jenkins-ci.org/plugins/git/latest/git.hpi2.http://mirrors.jenkins-ci.org/plugins/violations/latest/violations.hpi3.http://mirrors.jenkins-ci.org/plugins/cobertura/latest/cobertura.hpi4.http://mirrors.jenkins-ci.org/plugins/envinject/latest/envinject.hpi
装完之后还需要装一些命令行的支持程序,注意,需要装在你的runtime的env里:
pip install coverage //测试覆盖率检查pip install unittest-xml-reporting //xml测试报告pip install nose //测试相关pip install pylint //代码风格检查pip install clonedigger //重复代码检测
编写测试用例模板
在setup.py所在目录新建 tests 目录(此处演示项目为paster创建的一个python模块,setup.py所在目录即为项目根路径)
然后参考xclubs.pubsrv项目的tests,把里面的两个py文件复制过来修改(我把代码贴在下面好了。。),把相应的模块名替换为你自己的
# -*- coding: utf-8 -*-#文件路径tests/run.py"""xclubs.pubsrv unit test suite.Usage: python run.py"""import sys, osos.chdir(os.path.dirname(__file__))_EXIT_FAILED = 1_MODULE_NAME = 'xclubs.pubsrv' #xclubs.pubsrv这里要改try: import noseexcept ImportError: print ('nose is required to run the test suite') sys.exit(_EXIT_FAILED)try: sys.path.insert(0, '..')except ImportError: print ('can not find %s to test: %s' % (_MODULE_NAME, sys.exc_info()[1])) sys.exit(_EXIT_FAILED)else: print ('%s test suite running (python %s)...' % (_MODULE_NAME, sys.version.split()[0]))nose.main()
# -*- coding: utf-8 -*-#文件路径tests/test_smssrv.pyimport unittest#from xclubs.pubsrv import sms #这里要改,引用你需要测试的功能,现在已经注释掉了,因为目前没有任何可加载的包class SmsTest(unittest.TestCase): def setUp(self): #初始化 self._phone = 15000000000 self._msg = 'test msg' #测试某一个具体的功能 def test_send(self): #测试发送短信的功能,目前没有模块,直接注释掉 pass #there is no sms and send() ,so disable related line #self.assertEquals(sms.send(self._phone, self._msg),1)# 测试另一个函数# def test_another_method(self):# pass#
其中run.py用来运行所有测试脚本的,test_smssrv.py是具体测试某一组功能的,以后新建的测试用例均以test_开头
然后把tests目录的更改push到git
新建项目
点击 “新job” ->填写项目名称->选择 “自由风格...”
“源码管理”栏目:选“git”-> Repositories填入地址,如:
git@xcgti.com:xclubs.pubsrv.git
Branches to build填入你的feature分支,如:
origin/xclubs.pubsrv_20120607_sendsms
“构建环境” 栏目: 勾选 “Inject environment variables to the build process” -> Properties Content 里加入:
PATH=/opt/pyenv/xclubs/bin:$PATH#/opt/pyenv/xclubs/bin即为装了flask等项目依赖包和刚刚装了coverage等插件的env#如果你没有使用virtualenv那就跳过此步骤
以下就是插件需要做的检测,由shell实现 “构建” 栏目: 增加构建步骤 ->execute shell
第一个:运行测试用例,并生成报告
#!/bin/bashcoverage run tests/run.py --with-xunitcoverage xmlecho "run unit test complete"
再添加一个:检测代码风格
其中xclubs.pubsrv 是某一个具体的包名,改为你自己的
#!/bin/bashpylint --rcfile scripts/pylintrc -f parseable --max-line-length=120 xclubs.pubsrv > pylint.txtecho "run pylint complete"
第三个:检测重复代码
xclubs是总的包名,改为你自己的
#!/bin/bashclonedigger --cpd-output -o clonedigger.xml xclubsecho "run clonedigger complete"
构建后操作
即构建之后,将检测结果导出给jenkins使用
点击 “add post-build action”->“Publish JUnit tests result report”->填入: **/tests/nosetests.xml ->勾选 “保留长的标准输出/错误”
再点击 “add post-build action” -> “Publish Cobertura Coverage Report” ->
Cobertura xml report patter 填写:**/coverage.xml
Source Encoding选择 “UTF-8”
再点击 “add post-build action” -> “Report Violations” ->
cpd栏填写:**/clonedigger.xml
pylint栏填写:**/pylint.txt
Source encoding选择:UTF-8
点击保存
点击你刚刚建的项目, 左侧点 “立即构建”
左侧的Build History里出现如下的一次构建历史
#1 2012-6-6 19:54:53
若构建结果为蓝色表示全通过,否则就有问题,具体可点进去查看“控制台输出”
- git+jenkins/hudson+python构建环境
- jenkins Git maven Nexcus 构建环境搭建
- jenkins+maven+git自动构建环境搭建
- Jenkins GIT Maven 构建持续发布环境
- hudson(jenkins)任务设置一天多次构建
- 搭建Hudson分布式构建环境
- 搭建Hudson分布式构建环境
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- Git、Gerrit与Jenkins/Hudson CI服务器
- 如何搭建Gerrit+Jenkins(Hudson)测试环境
- git+jenkins构建
- 构建基于Jenkins+Git+Grails持续集成环境
- 构建基于Jenkins+Git+Grails持续集成环境
- OpenGl第三章后续,纹理,绘制图片,文字
- Android USB gadget probe流程
- cplusplus思考与实践
- 控制台app.config 的 <add key="aspnet:MaxHttpCollectionKeys" value="10000" />无效
- iOS边城之绘图编程(Core Graghics)
- git+jenkins/hudson+python构建环境
- hbase 安装及简单测试
- css 常用属性缩写
- linux命令行去掉滴滴声
- Java构造时成员初始化的陷阱
- 不错的网站智慧石资源
- ecshop无法登录
- php 编译参数
- css3 背景渐变