持续集成环境Jenkins的搭建和使用
这几天试着搭了个持续集成环境,我使用的是Jenkins,它的前身是Hadson,由于被Oracle收购了,所以换个名字继续开源,这个有点像MySQL。
持续集成总是跟敏捷开发什么的搞在一起,显得非常高大上,事实上它就是一个后台服务+web管理配置页面,它能够自己主动化(定时或事件触发)地运行某项任务,比方编译程序、打包程序、自己主动公布等等。这个在web开发或者大项目的多人合作上面非常有帮助。仅仅要配置好了,然后能够个人做个人的,Jenkins会自己主动的从svn或git上面获取最新的代码,整合编译公布。相当于主程的非常大一部分工作(公布版本号)都由Jenkins自己主动完毕了。由于手游项目比較小,所以Jenkins的意义不是非常大,可是通过Jenkins依旧能够自己主动化的处理资源、整合公布版本号、自己主动化处理渠道包等等。
一、搭建Jenkins环境
从http://jenkins-ci.org/下载相应的版本号安装,它会自己主动启动一个后台服务。在浏览器中訪问http://localhost:8080/能够管理和配置Jenkins,这个地址相同是能够设置的。
在"系统管理"里面能够设置全局选项(比方svn版本号),也能够下载和更新插件。
搭建好开发环境非常easy,这个也是Jenkins比其它持续集成工具要优秀的地方。
二、新建一个任务(Job)
这里有两个经常使用的选项一个是"构建一个自由风格的软件项目",还有一个是"构建一个多配置项目"。
我经常使用的是自由风格的软件项目,而多配置项目用于这种情形:任务相似,可是一些选项和配置不同,比方debug和release版本号,比方android的各种渠道包,这个就能够加入相应的Key-Value来进行配置,构建的时候就能够选择相应的内容来构建,而不是所有构建。
在Repository URL里面配置svn的server地址,Credentials里面配置用户和password。假设是老的svn插件可能没有Credentials,推荐更新到最新。
"构建触发器"里面能够设置这个任务怎样触发(比方按时间触发、其它任务完毕后触发等等,这个后面会重点说明),插件里面有非常多触发类型可选,比方[FS Trigger]这个就是一个插件的功能。
"构建"里面能够设置怎样完毕构建。能够是windows的命令,也能够是shell脚本,shell脚本里面相同能够是python代码。这些在windows以下都是能够使用的。
"构建后操作"能够设置构建完毕后邮件通知或者是其它事情。通过插件,能够在这里完毕很多其它的功能。
三、開始构建
点击"马上构建"则能够马上開始运行构建流程。假设在配置里面设置了Poll SCM,则这里还会有Polling Now的选项。Poll能够查看svn,假设有更新,则開始构建,否则不做不论什么处理。这个后面实际应用里面会介绍。
"工作空间"里面能够看到Jenkins检出的svn目录内容(一般在'Jenkins安装目录'/jobs/任务名/workspace目录下)。
四、查看构建结果
在这里能够查看详细的构建结果。svn的更新内容、命令行的输出都会在这里显示出来(比方Python代码的print)。 只是我使用的时候有一个问题就是这里的显示结果非常诡异,通过某种方式点进来就会显示python的输出,而另外某种方式就不会。
五、实际应用
1、我的实际需求大概是这种,Jenkins自己主动检測svn的状态变化。当发现资源改变,则自己主动执行脚本进行资源或者配置的转换,Jenkins自己主动把转换后的结果提交。每隔两个小时自己主动构建打包整个client。
2、这么做的优点。全部人仅仅须要关注svn,美术和策划负责提交正确的原始资源到svn上面,而client程序仅仅须要更新svn就能够获取到正确的转换后的资源。就像Unity一样,打包的时候会自己主动进行资源转换。程序不须要在打包的时候担心哪些资源应该是什么格式,哪些配置还没有导出,这些都是自己主动完毕的。
六、问题的解决
1、Jenkins怎样检測svn的变化。
这个有两种方式,一种是依赖于svn的机制,post-commit的hook。TortoiseSVN中能够右键菜单中选择Propertise,在里面选择Local Hooks,它能够指定一个程序或者bat的批处理,作用是这个目录有提交,则在提交完成后运行相应的命令。 只是这个是本地Hook,仅仅有本地提交的时候才会运行。
在svnserver上面能够在hook目录以下加入post-commit的hook。这个我没有尝试,只是理论上是不论什么人提交都会运行相应命令,并且因为是在server上面,所以这个批处理仅仅须要放置在server就能够。
还有一种方式是依赖于Jenkins的轮询机制(Poll),这个也是我如今使用的方式。这个事实上不如post-commit的机制,由于有轮询间隔就比然会有延迟,只是在无法操作svnserver的时候,这个也是一个不错的解决方式。 我的实现方法是这种,新建一个monitor任务,这个任务的svn路径是我们须要检測的详细目录,比方excel目录。给它设置一个轮询时间例如以下图所看到的:
这个触发器的意思就是每隔两分钟检測一次svn的变化,假设发现变化则触发构建。日程表中的详细格式能够点击旁边的问号来查看,功能非常强大,能够指定每隔几个小时或者是周一至周五的什么时间段触发。 注意间隔时间最小为2分钟,我设置1分钟会出问题,无法触发构建,当然更不能设置间隔多少秒来运行。
新建一个正式的任务,它的功能就是真正构建client或者是转换资源。它的触发条件是monitor构建成功。在触发条件中选择 Build after other projects are built 然后填写要监听的monitor的任务名字。
这样每一个两分钟monitor会检測svn的状态,因为excel文件夹非常小,所以这个检測速度是非常快的。当发现该文件夹内容有改变,则触发构建,从而触发转换资源的任务。
2、构建命令
d:
cd "D:\Program Files (x86)\Jenkins\jobs\excel\workspace\tools\excel"
python.exe excel2lua.py
python.exe excel2json.py
cd "D:\Program Files (x86)\Jenkins\jobs\excel\workspace\table\server" for /f "tokens=2*" %%i in ('svn status ^| find "?"') do svn add "%%i"
for /f "tokens=2*" %%i in ('svn status ^| find "!"') do svn delete "%%i"
svn commit --username xxxx --password xxxx -m "automatic jenkins excel"
通过这个构建命令,运行了这么几个操作。跳转到工作文件夹,运行转换脚本。 然后到转换后的文件夹提交改动内容。
svn命令须要下载subversion,并加入到系统的环境变量中。因为Jenkins的Svn插件的svn版本号仅仅到1.7,所以必须下载1.7版本号的subversion。这样才干正确操作Jenkins检出的svn文件夹。
最后三行命令能够自己主动检測文件的加入和删除,然后运行提交。
3、共享工作文件夹
这个没有研究成功。我如今就无论会不会浪费空间了,一个Job一个workspace。理论上在配置里面选择"高级",然后能够指定Custom Workspace的。可是有个问题就是Job同一时候执行时可能会有锁和冲突,造成了Jenkins会清空并又一次检出工作文件夹。并且Jenkins使用的是1.7的svn(默认是1.4须要在系统管理中改动),所以无法识别1.8版本号的TortoiseSVN检出的工作文件夹。
4、怎样通过脚本或者命令触发构建
把鼠标指向马上构建button,这里显示的链接地址就是触发马上构建的命令:http://localhost:8080/job/excel/build?delay=0sec 我们仅仅要在脚本或者批处理中调用ie打开这个链接就能够通知Jenkins进行构建了。
当然调用这个地址的方式有非常多,比方wget、curl等等。
5、不识别系统设置的环境变量
貌似Jenkins里面的环境变量要单独设置,比方NDK_ROOT、JAVA_HOME什么的。设置的地方在"系统设置"--"全局属性"里面
持续集成环境Jenkins的搭建和使用的更多相关文章
- 使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置
安装Eclipse插件——Buildship 什么是Buildship? Buildship能方便我们通过Eclipse IDE创建和导入Gradle工程,同时还能执行Gradle任务. Eclips ...
- 有手就行2——持续集成环境—Jenkins安装、插件、用户权限及凭证管理
有手就行2--持续集成环境-Jenkins安装.插件.权限及凭证管理 持续集成环境(1)-Jenkins安装 持续集成环境(2)-Jenkins插件管理 持续集成环境(3)-Jenkins用户权限管理 ...
- Jenkins持续集成01—Jenkins服务搭建和部署
一.介绍Jenkins 1.Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Je ...
- 16.1-Jenkins持续集成01—Jenkins服务搭建和部署
分类: Linux架构篇 一.介绍Jenkins 1.Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何 ...
- 持续集成基础-Jenkins(二)-搭建Jenkins环境和配置第一个Job
安装方式一(直接启动): 1.下载最新的版本(一个 WAR 文件).Jenkins官方网址: http://Jenkins-ci.org/ 2.运行 java -jar jenkins.war(需要运 ...
- Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)
Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面开始搭建.net持续集成环境 Jenkins和SVN安装这里就不介绍了 一.准备工作 1.Jenkins中系统 ...
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs ...
- Docker 结合Jenkins 构建持续集成环境
Docker 结合Jenkins 构建持续集成环境 Jenkins : 一个开源的持续集成工具, 提供软件版本发布.自动测试等一系列流程及丰富的插件 Maven: 一个自动化构建工具, 通过一段描述 ...
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
前言 上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...
随机推荐
- 如何捕获winform程序全局异常?(续)
前言 上篇文章我提供了一种方案可以供我们捕获单线程程序中的所有未处理异常.但是如果程序是多线程,那么新增线程出现了异常上个方案就无能为力了.本着方案总比问题多的态度,我再给大家提供一种新的方案,供大家 ...
- 查询mysql哪些表正在被锁状态
1.查进程,主要是查找被锁表的那个进程的ID SHOW PROCESSLIST; 2.kill掉锁表的进程ID KILL 10866;//后面的数字即时进程的ID
- 博弈问题之SG函数博弈小结
SG函数: 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负.事实上,这个游戏可以认为是所有Impartial Combinatorial Ga ...
- 深入浅出OpenStack云计算平台管理(nova-compute/network)
一.本课程是怎么样的一门课程(全面介绍) 1.1. 课程的背景 OpenStack是 一个由Rackspace发起.全球开发者共同参与的开源项目,旨在打造易于部署 ...
- 基于visual Studio2013解决面试题之0507字符串转整数
题目
- 在webx.ml中 配置struts2 后 welcome-file-list 失效的解决办法
struts2 <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.a ...
- linux中怎样设置dhcpd
linux中怎样设置DHCP 在 linux 以下设置 DHCP一点也不复杂﹐您全部要做的仅仅有一个文件﹕/etc/dhcpd.conf . 以下﹐我用我自己的设置文件来说说怎么改动这个文件﹕ d ...
- JS - 提示是否删除
1. OnClientClick="return confirm('确定要删除吗?') 2.自定义函数: 函数: <script type ="text/javascript ...
- linux 解压操作命令
http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0. ...
- Swift - 九宫格图片缩放总结样例
1,图片左中右三宫格缩放形式 //左右14像素不变形,中间缩放 let imgTrackRight = UIImage(named:"slider_max") let imgRig ...