2014年8月29日 星期五 阴有小雨

Jenkins,之前叫做Hudson,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,包括: 1、持续的软件版本发布/测试项目。 2、监控外部调用执行的工作。

上周我在别的部门看到了这个好东西,一心要搭起来,解放部门的人力,这周就实践起来。我是在WIndows上安装Master的,Slave可以是能连接上的任意操作系统的机器,呈现给用户的是web,使用很方便。

官网:http://jenkins-ci.org/

一、 安装 在官网的右侧有Native Package,我直接下载WIndows的Package ,解压后直接安装,一路Next就结束了。安装完成,访问http://localhost:8080就可以看到效果了,还是很方便的。

二、配置

  1. 先安装插件 必须安装有JRE或者JDK,windowsXP推荐使用JRE7。如果没安装有的话,不能显示有插件可以更新。

系统管理–》管理插件 没有插件,Jenkins的威力会大打折扣的。一开始就应该先安装插件。 (1)可更新的:凡是能更新的都更新,我有强迫症。 (2)可选插件:根据自己的需要选。 Jenkins Plungin.bmp

  1. 系统管理 -》系统设置 (1)由于这台windows是不参与编译的,所以改为只允许绑定到这台机器的Job。 (2)Jenkins Location与邮箱配置 在这里改为自己想要的网址,默认是localhost:8080,局域网用IP访问即可。 系统管理员邮件地址,这里要写要发出邮件的那个人的邮箱帐号。这里和下面的“邮件通知”配合,填SMTP服务器为自己的服务器,比如mail..com, 用户默认邮件后缀填@.com,勾上“使用SMTP认证”,填好用户名、密码和端口等,发送测试邮件。

  2. 系统管理 -》Configure Global Security (1)启用安全,勾上 (2)安全域

  • Active Directory ,域用户。我现在用的是这个,我实在懒得一个个添加名字了。注意了,如果显示器很大的话,要把横向滚动条拉到最右边,点高级,在Domain Name里填入域名。 缺点:不在这个域的用户,只能匿名访问,拥有的是匿名访问的权限了。

  • Github Authentication Plugin :看起来是用Github账户登录的,也不错

  • Jenkins专有用户数据库:自己创建本地的用户

(3)授权策略 我采用了安全矩阵,这个看起来比较简单。我只给我自己设置了所有权限,匿名的只有read权限。 项目矩阵授权策略,可能更适合复杂的项目。

(4)管理节点 我是不会用我的机器去参与编译的,网站服务器就只干网站服务器的事情。编译这种活,肯定要专门的编译服务器去干。所以,要添加节点(干活的Slave)。

Name和描述:填一下

of executors:默认是1,没改,编译不想同时编译几个。

远程工作目录:填slave在哪里运行的,编译的话尽量找一块空间大的地方。 标签:看帮助吧 用法:尽可能的使用这个节点和只允许运行绑定到这台机器的Job,这个看着选吧,意义不一样的。 启动方法:我是连Ubuntu用的,选了SSH Host:填slave机器的IP地址。 Credentials:要添加一个,这里要写SSH连接远程机器的方法,要么用户名密码,要么用key来认证。端口号如果不是22的话,也要填一下。对了,Ubuntu默认是没有ssh-server的,要sudo apt-get install openssh-server安装,通过sudo /etc/init.d/ssh start运行,默认端口是22。

其他参数都用了默认配置。

配置好之后,可以在首页左下角可以看到机器的状态。

三、构建队列 这是各取所需了。我选构建一个自由风格的软件项目,这是Jenkins的主要功能.Jenkins将会结合任何SCM和任何构建系统来构建你的项目, 甚至可以构建软件以外的系统。

写一下我现在用到的:

  1. 项目名称:按需填一下

  2. HTML5 Notification Configuration,这里Restrict where this project can be run,可以限制这个Job在哪台机器上运行。

  3. 构建触发器-》Poll SCM,比如写H 2 * * *,表示每天2点运行

  4. 构建–》增加构建步骤–》Execute Shell,例子如下: #!/bin/bash rm -rf Project*/ svn export http://××××/export_××.sh –force
    source export_×××.sh build_×××× 0 0 0 0 0 . imgout

稍微解释一下: 第一行很重要,Linux有bash,dash还有sh等。试了多次,还是bash才行 第二行:删除之前的目录 第三行:从服务器上下拉最新取代码和编译的脚本,我们做在一个shell文件里。 第四行:执行脚本 第五行:添加参数(参数也可以是变量,在前面有配置可以定义),运行脚本。即所有的功能都在。 第六行:结果打包(其实也可以做到之前的脚本里)

构建后操作: 我装了Email-Notification的插件,不管是出错还是成功,到最后都会发邮件及时通知owner。

最后,应用-》保存–》立即构建,然后看看效果吧。

以上只是举例,可以因地制宜做自己任何想做的事情。只要shell脚本或者批处理能干的事情,Jenkins都能干。可以进行每日构建(单个项目)、定时备份SVN仓库/Git仓库、定时删除多余文件和目录等,还可以在编译完进行整包升级并自动化测试。 可以支持版本发出,可以把img拷贝到文件服务器,上传ftp等。

  1. 下图左下角大概是机器的状态,master是我的电脑,其他两台是slave,如果有任务的话,会在机器下面显示job的进度条

  2. 右半边图(鼠标移上去可以看到状态): 第一列图标表示最后一个job的执行状态,红色是Fail,蓝色是Success,灰色是Abort(人为终止),黄色表示Unstable(执行成功概率太低) 第二列图标表示job执行的成功概率,乌云和闪电表示成功概率太低。 第三列是job的名字,鼠标放上去可以看到记录。如果有权限修改的话,可以看到更多的菜单。 最后一列是这个job运行命令的反馈,console输出的信息同步到这里来了,应该是Ajax动态刷新的。

jenkins.bmp