- 浏览: 96656 次
- 性别:
- 来自: 武汉
最新评论
-
killoceaner:
你好,我在配置好jenkins后手动安装插件时总是报出Caus ...
Jenkins使用经验谈2(系统设置及插件管理) -
huming:
WOW 里有好多玩家,又有好多故事。
记忆碎片,关于魔兽世界 -
zhangyifan_614:
您的工具能否共享下呢?
浅谈 Mongo DB 的 oplog -
bookong:
PTZhuf 写道PTZhuf 写道楼主, authentic ...
Jenkins使用经验谈5(用户的登录与权限设定等) -
bookong:
PTZhuf 写道楼主, authenticated 这个是j ...
Jenkins使用经验谈5(用户的登录与权限设定等)
前面做了那么多工作,现在终于到了创建Job这一步了,某种意义上,Jenkins的主要工作就是为了调度这些Job。Job的创建是有很大自由度的,也没有谁规定一定要创建成什么样子才行。下面我会以实际使用中的几个场景来举例说明。
需要注意的是:
先做一些准备活动
为了方便我们后面的实验,先找一台虚拟机,在上面搭建一下git服务器和代码质量管理平台(我这里使用的是sonar)。
搭建git服务器
因这部分不是我们的重点,所以我打算搭建一个最简单的基于SSH的git服务器,假设这台服务器IP为 172.16.12.83。
首选先从 https://github.com/git/git/tarball/master 下载git代码,按照下面的步骤解压并安装。
创建一个git用户并以登录到这个git用户,然后在该用户的家目录下创建一个 git_home 用于存放项目代码(暂时先给git用户设置密码为git)。
我们现在在 /tmp 下创建一个git 本地库,比如叫 helloJava,然后向这个库里提交一个 readme.txt 文件(因为第一次使用git,还需要设置一下用户名和邮件地址)。
将隐藏的 .git 目录拷贝到 /home/git/git_home 下,并改名叫 helloJava.git 目录。
我们在另一台服务器上试着clone出helloJava 项目。
简陋的 git 服务器搭建好了,足够我们实验用的了。
奴隶节点安装git程序
之前的文章中,我们创建了两个奴隶节点,操作系统分表为 Win7 和 CentOS。现在我们分表在上面安装git软件。CentOS这个节点的安装方法上面已经介绍了,只要再照做一遍就可以。Win7 下需要安装 msysgit 软件 http://msysgit.github.io/。
到 https://code.google.com/p/msysgit/downloads/list?q=full+installer+official+git 下载一个最新的程序,比如我下载的是 Git-1.8.4-preview20130916.exe,安装时在下图所示步骤里,选择“Run Git from the Windows Command Prompt”,将git添加到PATH路径中,其他都选默认值。
安装后检查一下
配置访问git服务器的凭据
还记得我们在上一集里配置了访问CentOS 奴隶节点的凭据吗?
用相似的方法在git服务器上给git用户添加一个公钥(具体步骤就不重复了),然后将私钥文件(id_rsa)分别拷贝到两台奴隶节点的当前用户家目录下的 .ssh 下(要注意在Linux系统下这个文件的权限必须是600)
搭建一个sonar服务器
为方便实验,我们把sonar搭建在git服务器上(172.16.12.83)。
首选到 http://www.sonarqube.org/downloads/ 下载最新的SonarQube。
解压到 /usr/local/ 下
虽然Sonar可以使用默认的H2嵌入数据库,但Jenkins上的Sonar插件不支持,所以这里我们要安装一个MySQL的数据库
我们到下载一个 MySQL,我下的是 MySQL-client-5.5.29-1.linux2.6.i386.rpm 和 MySQL-server-5.5.29-1.linux2.6.x86_64.rpm。
下载链接:http://dev.mysql.com/downloads/mysql/5.5.html#downloads
安装这两个 RPM 包。
拷贝模版文件构造 my.cnf。
修改 my.cnf 内容
启动 mysql
进入 mysql 客户端创建默认的库sonar,添加访问用户(用户名sonar,密码sonar),并退出 mysql 客户端。
然后可以实验一下用sonar用户能否正常登录:
修改 sonar 目录下 conf/sonar.properties 文件,启用 MySQL 相关设置
启动sonar。
在浏览器中输入 http://172.16.12.83:9000/ 看到 sonar 的界面。
创建一个用于健康检查的Job
我们打算创建这样一个Job,每十五分钟检查一次代码库,发现有提交动作就触发构建,编译代码并执行单元测试,它的目的是保证构建的完整性。在这个例子里,我们假设代码是Java语言编写,需要JDK 7来编译,使用ant工具来编译执行单元测试,需要在Win 7 系统上来做这一切。
首选我们先进入Jenkins页面中的“系统管理”→“系统设置”,找到 “JDK”部分,选择“新增JDK”。
我们选择让Jenkins系统在需要的时候自动安装“Java SE Development Kit 7u40”。
注意最下面的错误提示,需要你输入一个Oracle 帐号,点击链接进去,是一个需要输入帐号和密码的页面(帐号可以到 https://login.oracle.com/mysso/signon.jsp 免费注册)。
设置好JDK后,我们找到“Ant”部分,点击“新增Ant”按钮。也同样设置在构建需要时自动安装Ant。
作为这一切后,点击屏幕下方的“Save”按钮保存配置。
然后我们写个简单的,用Ant编译的Java小程序,javaAntSample 推送到之前搭建好的git服务器上(具体方法参考前面关于git服务器部分的说明)。在这个程序的 build.xml 里,我们主要想执行 testrun 这个 target,它会完成编译并执行单元测试的工作,最后在项目根路径下产JUnit单元测试的报告 TEST-sample.project1.AllTests.xml。
现在回到Jenkins的首页,点击“新Job”。使用Ant编译的话我们要选择“构建一个自由风格的软件项目”;“任务名称”我写的是“project1_javaAntSample-auto”,这个名字里我想表达说这个Job属于“project1”项目,之后我建立视图时会用正则匹配所有以“project1_”开头的项目;后面的“javaAntSample”希望我直接查看操作目录时有比较直观的提示,我希望用最后的“auto”标明这是一个做监控检查的Job。当然你也可以采用其他的命名规则。
确定以后涉及的内容比较多,我一点一点来介绍。
首选“描述”这部分很好理解,当你点击进入某个Job查看详情时,会显示在页面的上方,这个部分可以在里面写HTML内容。
下面的“丢弃旧的构建”很重要,我们曾经遇到过使用的太久后无用的发布包(比如WAR包)将磁盘空间耗尽的情况。我建议这里设置“发布包最大保留#个构建”设置为1。
后面的几项我一般不做设置,但“Restrict where this project can be run”要设置希望构建的奴隶节点,我们这里设置为 win。
“高级项目选项”这里,我一般只设置 “Display Name”,这里设置一个中文名称后,在Jenkins里显示Job时优先显示这个值。
下面就到了“源码管理”这部分了,选择“Git”,填写仓库的URL和希望签出的分支名。
你可能注意到了,下面有一大串错误提示“Fail to connect to repository……”这个不用管它,因为Jenkins的主节点我们没有配置访问git服务器的密钥的原因。
如果你在Job执行时出现下面错误
点击“高级”按钮,我们在下面的地方随便设置一下(可以设置一个管理员的邮箱)。
下面的“构建触发器”部分,我们希望是每15分钟检查一次代码库,如果有变化,则触发构建。
在下面的“构建”部分,点击按钮“增加构建步骤”,选择“Invoke Ant”。
Ant的版本选择我们一开始在“系统设置”里指定的版本,第一次执行前它会自己下载。“Targets”输入“testrun”,这个值来自我们的build.xml文件中的定义。
在下面的“构建后操作”中,点击“Add post-build action”按钮,在列表中选择“Publish JUnit test result report”。
由于我们的报告是输出到项目根路径下,所以我们这里直接填写XML文件名。
现在再次点击“Add post-build action”按钮,选择“E-mail Notification”,添加失败后的邮件提醒。这里不但可以设定固定通知的人,还可以自动发邮件给疑似导致构建失败的人。
如果你有时间就等待它自动触发构建,否则你可以点击直接触发构建
这时候你执行Job的构建会发现一直停留在git签出代码阶段,造成这个的原因是家目录不正确,没有找到私钥的原因。我们可以有两个方式解决。
解决Win7下无法签出git代码
方式一:修改Win7奴隶节点的设置
添加两个环境变量“HOMEPATH”和“USERPROFILE”。
方法二:安装插件 EnvInject Plugin
我们在插件管理页面中,安装插件“EnvInject Plugin”。
这时再修改Job的定义(在“参数化构建过程”下面会出现新的属性“Prepare an environment for the run”。设置里面的“Properties Content”
最后执行结果
创建一个用于代码质量分析的Job
假如我们希望对代码进行静态检查,可以创建这种Job。最简单的方式就是与sonar进行集成,sonar支持众多语音的静态检查,包括:.NET($)、Android、C/C++($)、C++(社区版)、Java、JavaScript、PHP等等,其中后面带($)表示收费版本,比如C/C++ 插件一年7000欧元。http://docs.codehaus.org/display/SONAR/Plugin+Library
使用前我们先安装Sonar插件“Jenkins Sonar Plugin”
安装好插件后,我们进入“系统设置”页面。
先找到“Sonar Runner”这里,点击“新增 Sonar Runner”按钮。
向下,找到“Maven”部分,新建一个Maven(就像前面创建的Ant一样,需要时他会自动安装的)
再向下,找到“Sonar”部分,点击“Add Sonar”按钮。其中“Server URL”就是我们Sonar的访问URL“http://172.16.12.83:9000/”;Sonar默认帐号和密码都是“admin”;数据库部分的设置就是我们前面配置Sonar配置文件中写的MySQL相关设置。
前一个Job里,我们用Ant构建了一个Java项目,毕竟Ant已经过时了,我们在这个Job试试用Maven构建一个项目,先创建一个用Maven构建的项目 javaMavenSample 推送到我们实验用的git服务器上。Maven构建时除了pom.xml 外还有一个重要的配置是 settings.xml 文件,一般在这个文件中指定私服 nexus 的地址,一般情况下会要求将这个文件放在本地用户家目录下的 .m2 文件夹中。但对Jenkins来说这样可能造成一个构建干扰另一个构建的情况,所以我们将这个 settings.xml 文件放在 javaMavenSample 项目的根目录下一起提交。
现在创建一个新Job,名称就叫“project2_javaMavenSample-nightly”,类型选择“构建一个maven2/3项目”
其他的设置参考前面监控检查的Job吧,这里只说说不一样的地方。
触发构建的日程表我们可以设置成“H 0 * * *”,表示每天晚上0点检查代码库是否有更新。因为静态检查是一个极其消耗资源的缓慢过程,所以没有必要在健康检查中触发。
Maven项目的Job会有一个“Build”部分。“Goals and options”我们写“clean install”,点击“高级”按钮展开高级属性,在“Settings file”这里,选择“Settings file in filesystem”,“File path”上可以写相对于Job工作区的相对路径,这里我们直接写“settings.xml”,这样代码库中随项目一起提交的settings.xml就会生效。
在“构建后操作”这部分,点击“Add post-build action”按钮,添加“Sonar”,基本上安装默认值就可以。
执行Job看一下。
成功后到我们的Sonar服务器上可以看到结果 http://172.16.12.83:9000/
创建自动部署测试环境的Job
创建一个自动部署到测试环境的Job有很多方法。
方法一:通过Deploy Plugin
安装“Deploy Plugin”插件。这个插件支持 Tomcat 4.x/5.x/6.x/7.x、JBoss 3.x/4.x、Glassfish 2.x/3.x 的自动部署。
你可以在设置Job的“构建后操作”部分添加“Deploy war/ear to container”
要注意的是,比如你自动部署到 Tomcat 上,那么它的 webapps 目录下 manager 需要保留,然后在 conf/tomcat-users.xml 文件中,添加如下内容
方法二:通过脚本
这种方式更自由,你可以写好一个脚本来做你希望的事情,然后通过Jenkins来远程启动这个脚本。
如果时执行Windows下的批处理,就选择“Execute Windows batch command”,如果是bash脚本,就选择“Execute shell”。
写脚本时,有写Jenkins的内部变量你可以使用,比如我们这个实验系统,有个页面就是介绍这些内部变量的 http://ci.abc.com/jenkins/env-vars.html/。
创建一个做集成测试的Job
这一类的Job一般是依赖某个Job(比如手动部署测试环境)构建后启动构建。所以我们在配置Job属性时配置:
展示报告
Jenkins 的插件已经覆盖了大部分的报告格式(测试报告、静态检查报告等),如果你使用了一个工具的报告格式是不常见。你可以尝试把格式转化为XUnit兼容的格式展示。或者可以将报告产生的XML文件结合 XLS文件通过 “HTML Publisher Plugin” 插件来展示。
关于 XSL 展示 XML ,有兴趣可以看看 http://www.ibm.com/developerworks/cn/xml/theme/x-xsl.html
交互风格的Job
这是个有趣的功能,比如上面我们说的用于自动部署的Job,如果常规的构建方式,我们只能构建最新的代码,如果我们希望能部署指定的某次提交到测试环境怎么办呢?我们可以设置“参数化构建过程”来实现(参数化构建的本质是在构建前让你和Job有个交互过程,交互结果以环境变量方法参与到Job的构建)。
首选参考前文,在主节点上安装git工具并且配置访问git服务器的私钥(id_rsa)到 .ssh 目录下。
编辑Job的属性,找到“参数化构建过程”添加一个“Git Parameter”。
执行后发现并没有列出git上的所有提交。
在“系统管理”→“System Log”中
查看“所有系统日志”得知,后台报错“No such file or directory”。我觉得这是Jenkins的一个Bug,我们配置Job是在奴隶节点上执行,它却在主节点上查找目录。关于这个问题我们用另一个方法来解决,我们欣赏一下在主节点构建的Job使用Git参数做参数化构建的效果。有一点要注意,这里虽然列出提交Id但不代表选择后会签出指定的这次提交代码,它只是将你选择的内容保存到你指定Name命名的环境变量里。
刚才说的另一个方法需要安装两个插件“Extended Choice Parameter plugin”和“Extensible Choice Parameter plugin”他们可以扩展参数化构建过程。
我们在 Jenkins 服务器上创建一个目录 /jenkins/tmp/,然后签出 javaMavenSample 项目的代码。
在Jenkins的服务器上创建一个 /jenkins/tools/ 目录,然后在下面写一个脚本 genProject2Revision.sh,内容如下:
设置crontab 让这个脚本每小时执行一次。
这样我们每小时就会更新 project2_revision.txt 文件内容如下
现在设置Job,添加“Extended Choice Parameter”
再执行Job,可以选择了
这里做的选择只会将选择内容保存到 GIT_COMMIT 环境变量里,要希望签出选定的代码,创建一个Pre-build setup。
目前这个测试项目的提交历史如下
当我选择中间的那次提交 ed8ec8bf4966cf41b859b5f60dd0fc96f5797af2 时,执行结果如下:
当选择最早的那次提交 2f65720bb717c4e62ae9d2e34d521689e30cd463 时,执行结果如下,构建失败的原因参考上面的提交历史可知,那次提交时 settings.xml 文件还未添加。
需要注意的是:
- Job名称千万不要用中文名称(不作死就不会死)。
- 创建Job名称时最好有个规划,因为我们最后会通过正则匹配自动将Job归类,比如我喜欢 “项目前缀_一些说明-Job类型”这种方式。
先做一些准备活动
为了方便我们后面的实验,先找一台虚拟机,在上面搭建一下git服务器和代码质量管理平台(我这里使用的是sonar)。
搭建git服务器
因这部分不是我们的重点,所以我打算搭建一个最简单的基于SSH的git服务器,假设这台服务器IP为 172.16.12.83。
首选先从 https://github.com/git/git/tarball/master 下载git代码,按照下面的步骤解压并安装。
[root@svr83 ~]# tar xzvf git-git-v1.8.4-474-g128a96c.tar.gz -C /usr/local/src/ [root@svr83 ~]# cd /usr/local/src/git-git-128a96c/ [root@svr83 git-git-128a96c]# autoconf && ./configure --prefix=/usr/ [root@svr83 git-git-128a96c]# make && make install
创建一个git用户并以登录到这个git用户,然后在该用户的家目录下创建一个 git_home 用于存放项目代码(暂时先给git用户设置密码为git)。
[root@svr83 ~]# useradd git [root@svr83 ~]# passwd git Changing password for user git. New UNIX password: BAD PASSWORD: it is WAY too short Retype new UNIX password: passwd: all authentication tokens updated successfully. [root@svr83 ~]# su - git [git@svr83 ~]$ mkdir git_home
我们现在在 /tmp 下创建一个git 本地库,比如叫 helloJava,然后向这个库里提交一个 readme.txt 文件(因为第一次使用git,还需要设置一下用户名和邮件地址)。
[git@svr83 helloJava]$ git config --global user.email "bookong@gmail.com" [git@svr83 helloJava]$ git config --global user.name "bookong" [git@svr83 ~]$ mkdir /tmp/helloJava [git@svr83 ~]$ cd /tmp/helloJava/ [git@svr83 helloJava]$ git init 初始化空的 Git 版本库于 /tmp/helloJava/.git/ [git@svr83 helloJava]$ echo "hello java project" > readme.txt [git@svr83 helloJava]$ git add * [git@svr83 helloJava]$ git commit -m 'initial project' [master(根提交) d605f94] initial project 1 file changed, 1 insertion(+) create mode 100644 readme.txt
将隐藏的 .git 目录拷贝到 /home/git/git_home 下,并改名叫 helloJava.git 目录。
[git@svr83 helloJava]$ cp -a .git/ /home/git/git_home/helloJava.git
我们在另一台服务器上试着clone出helloJava 项目。
[jenkins@svr82 test]$ git clone ssh://git@172.16.12.83/home/git/git_home/helloJava.git 正克隆到 'helloJava'... The authenticity of host '172.16.12.83 (172.16.12.83)' can't be established. RSA key fingerprint is 50:51:8e:ad:e0:da:1d:61:fb:d0:97:c0:2b:46:65:83. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.12.83' (RSA) to the list of known hosts. git@172.16.12.83's password: remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) 接收对象中: 100% (3/3), done. 检查连接... 完成 [jenkins@svr82 test]$ cat helloJava/readme.txt hello java project
简陋的 git 服务器搭建好了,足够我们实验用的了。
奴隶节点安装git程序
之前的文章中,我们创建了两个奴隶节点,操作系统分表为 Win7 和 CentOS。现在我们分表在上面安装git软件。CentOS这个节点的安装方法上面已经介绍了,只要再照做一遍就可以。Win7 下需要安装 msysgit 软件 http://msysgit.github.io/。
到 https://code.google.com/p/msysgit/downloads/list?q=full+installer+official+git 下载一个最新的程序,比如我下载的是 Git-1.8.4-preview20130916.exe,安装时在下图所示步骤里,选择“Run Git from the Windows Command Prompt”,将git添加到PATH路径中,其他都选默认值。
安装后检查一下
配置访问git服务器的凭据
还记得我们在上一集里配置了访问CentOS 奴隶节点的凭据吗?
用相似的方法在git服务器上给git用户添加一个公钥(具体步骤就不重复了),然后将私钥文件(id_rsa)分别拷贝到两台奴隶节点的当前用户家目录下的 .ssh 下(要注意在Linux系统下这个文件的权限必须是600)
搭建一个sonar服务器
为方便实验,我们把sonar搭建在git服务器上(172.16.12.83)。
首选到 http://www.sonarqube.org/downloads/ 下载最新的SonarQube。
解压到 /usr/local/ 下
[root@svr83 ~]# mv sonar-3.7.2.zip /usr/local/ [root@svr83 ~]# cd /usr/local/ [root@svr83 local]# unzip sonar-3.7.2.zip
虽然Sonar可以使用默认的H2嵌入数据库,但Jenkins上的Sonar插件不支持,所以这里我们要安装一个MySQL的数据库
我们到下载一个 MySQL,我下的是 MySQL-client-5.5.29-1.linux2.6.i386.rpm 和 MySQL-server-5.5.29-1.linux2.6.x86_64.rpm。
下载链接:http://dev.mysql.com/downloads/mysql/5.5.html#downloads
安装这两个 RPM 包。
[root@svr83 sonar-3.7.2]# rpm -ivh MySQL-*
拷贝模版文件构造 my.cnf。
[root@svr83 sonar-3.7.2]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
修改 my.cnf 内容
... [client] ... default-character-set = utf8 ... [mysqld] ... lower_case_table_names = 0 ...
启动 mysql
[root@svr83 sonar-3.7.2]# service mysql start
进入 mysql 客户端创建默认的库sonar,添加访问用户(用户名sonar,密码sonar),并退出 mysql 客户端。
[root@svr83 sonar-3.7.2]# mysql mysql> grant all privileges on *.* to 'sonar'@'%' identified by 'sonar'; mysql> grant all privileges on *.* to 'sonar'@'localhost' identified by 'sonar'; mysql> flush privileges; mysql> quit
然后可以实验一下用sonar用户能否正常登录:
[root@svr83 sonar-3.7.2]# mysql -h localhost -u sonar -p
修改 sonar 目录下 conf/sonar.properties 文件,启用 MySQL 相关设置
…… #----- MySQL 5.x # Comment the embedded database and uncomment the following line to use MySQL sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true ……
启动sonar。
[root@svr83 linux-x86-64]# pwd /usr/local/sonar-3.7.2/bin/linux-x86-64 [root@svr83 linux-x86-64]# ./sonar.sh start Starting sonar... Started sonar.
在浏览器中输入 http://172.16.12.83:9000/ 看到 sonar 的界面。
创建一个用于健康检查的Job
我们打算创建这样一个Job,每十五分钟检查一次代码库,发现有提交动作就触发构建,编译代码并执行单元测试,它的目的是保证构建的完整性。在这个例子里,我们假设代码是Java语言编写,需要JDK 7来编译,使用ant工具来编译执行单元测试,需要在Win 7 系统上来做这一切。
首选我们先进入Jenkins页面中的“系统管理”→“系统设置”,找到 “JDK”部分,选择“新增JDK”。
我们选择让Jenkins系统在需要的时候自动安装“Java SE Development Kit 7u40”。
注意最下面的错误提示,需要你输入一个Oracle 帐号,点击链接进去,是一个需要输入帐号和密码的页面(帐号可以到 https://login.oracle.com/mysso/signon.jsp 免费注册)。
设置好JDK后,我们找到“Ant”部分,点击“新增Ant”按钮。也同样设置在构建需要时自动安装Ant。
作为这一切后,点击屏幕下方的“Save”按钮保存配置。
然后我们写个简单的,用Ant编译的Java小程序,javaAntSample 推送到之前搭建好的git服务器上(具体方法参考前面关于git服务器部分的说明)。在这个程序的 build.xml 里,我们主要想执行 testrun 这个 target,它会完成编译并执行单元测试的工作,最后在项目根路径下产JUnit单元测试的报告 TEST-sample.project1.AllTests.xml。
现在回到Jenkins的首页,点击“新Job”。使用Ant编译的话我们要选择“构建一个自由风格的软件项目”;“任务名称”我写的是“project1_javaAntSample-auto”,这个名字里我想表达说这个Job属于“project1”项目,之后我建立视图时会用正则匹配所有以“project1_”开头的项目;后面的“javaAntSample”希望我直接查看操作目录时有比较直观的提示,我希望用最后的“auto”标明这是一个做监控检查的Job。当然你也可以采用其他的命名规则。
确定以后涉及的内容比较多,我一点一点来介绍。
首选“描述”这部分很好理解,当你点击进入某个Job查看详情时,会显示在页面的上方,这个部分可以在里面写HTML内容。
下面的“丢弃旧的构建”很重要,我们曾经遇到过使用的太久后无用的发布包(比如WAR包)将磁盘空间耗尽的情况。我建议这里设置“发布包最大保留#个构建”设置为1。
后面的几项我一般不做设置,但“Restrict where this project can be run”要设置希望构建的奴隶节点,我们这里设置为 win。
“高级项目选项”这里,我一般只设置 “Display Name”,这里设置一个中文名称后,在Jenkins里显示Job时优先显示这个值。
下面就到了“源码管理”这部分了,选择“Git”,填写仓库的URL和希望签出的分支名。
你可能注意到了,下面有一大串错误提示“Fail to connect to repository……”这个不用管它,因为Jenkins的主节点我们没有配置访问git服务器的密钥的原因。
如果你在Job执行时出现下面错误
点击“高级”按钮,我们在下面的地方随便设置一下(可以设置一个管理员的邮箱)。
下面的“构建触发器”部分,我们希望是每15分钟检查一次代码库,如果有变化,则触发构建。
在下面的“构建”部分,点击按钮“增加构建步骤”,选择“Invoke Ant”。
Ant的版本选择我们一开始在“系统设置”里指定的版本,第一次执行前它会自己下载。“Targets”输入“testrun”,这个值来自我们的build.xml文件中的定义。
在下面的“构建后操作”中,点击“Add post-build action”按钮,在列表中选择“Publish JUnit test result report”。
由于我们的报告是输出到项目根路径下,所以我们这里直接填写XML文件名。
现在再次点击“Add post-build action”按钮,选择“E-mail Notification”,添加失败后的邮件提醒。这里不但可以设定固定通知的人,还可以自动发邮件给疑似导致构建失败的人。
如果你有时间就等待它自动触发构建,否则你可以点击直接触发构建
这时候你执行Job的构建会发现一直停留在git签出代码阶段,造成这个的原因是家目录不正确,没有找到私钥的原因。我们可以有两个方式解决。
解决Win7下无法签出git代码
方式一:修改Win7奴隶节点的设置
添加两个环境变量“HOMEPATH”和“USERPROFILE”。
方法二:安装插件 EnvInject Plugin
我们在插件管理页面中,安装插件“EnvInject Plugin”。
这时再修改Job的定义(在“参数化构建过程”下面会出现新的属性“Prepare an environment for the run”。设置里面的“Properties Content”
最后执行结果
创建一个用于代码质量分析的Job
假如我们希望对代码进行静态检查,可以创建这种Job。最简单的方式就是与sonar进行集成,sonar支持众多语音的静态检查,包括:.NET($)、Android、C/C++($)、C++(社区版)、Java、JavaScript、PHP等等,其中后面带($)表示收费版本,比如C/C++ 插件一年7000欧元。http://docs.codehaus.org/display/SONAR/Plugin+Library
使用前我们先安装Sonar插件“Jenkins Sonar Plugin”
安装好插件后,我们进入“系统设置”页面。
先找到“Sonar Runner”这里,点击“新增 Sonar Runner”按钮。
向下,找到“Maven”部分,新建一个Maven(就像前面创建的Ant一样,需要时他会自动安装的)
再向下,找到“Sonar”部分,点击“Add Sonar”按钮。其中“Server URL”就是我们Sonar的访问URL“http://172.16.12.83:9000/”;Sonar默认帐号和密码都是“admin”;数据库部分的设置就是我们前面配置Sonar配置文件中写的MySQL相关设置。
前一个Job里,我们用Ant构建了一个Java项目,毕竟Ant已经过时了,我们在这个Job试试用Maven构建一个项目,先创建一个用Maven构建的项目 javaMavenSample 推送到我们实验用的git服务器上。Maven构建时除了pom.xml 外还有一个重要的配置是 settings.xml 文件,一般在这个文件中指定私服 nexus 的地址,一般情况下会要求将这个文件放在本地用户家目录下的 .m2 文件夹中。但对Jenkins来说这样可能造成一个构建干扰另一个构建的情况,所以我们将这个 settings.xml 文件放在 javaMavenSample 项目的根目录下一起提交。
现在创建一个新Job,名称就叫“project2_javaMavenSample-nightly”,类型选择“构建一个maven2/3项目”
其他的设置参考前面监控检查的Job吧,这里只说说不一样的地方。
触发构建的日程表我们可以设置成“H 0 * * *”,表示每天晚上0点检查代码库是否有更新。因为静态检查是一个极其消耗资源的缓慢过程,所以没有必要在健康检查中触发。
Maven项目的Job会有一个“Build”部分。“Goals and options”我们写“clean install”,点击“高级”按钮展开高级属性,在“Settings file”这里,选择“Settings file in filesystem”,“File path”上可以写相对于Job工作区的相对路径,这里我们直接写“settings.xml”,这样代码库中随项目一起提交的settings.xml就会生效。
在“构建后操作”这部分,点击“Add post-build action”按钮,添加“Sonar”,基本上安装默认值就可以。
执行Job看一下。
成功后到我们的Sonar服务器上可以看到结果 http://172.16.12.83:9000/
创建自动部署测试环境的Job
创建一个自动部署到测试环境的Job有很多方法。
方法一:通过Deploy Plugin
安装“Deploy Plugin”插件。这个插件支持 Tomcat 4.x/5.x/6.x/7.x、JBoss 3.x/4.x、Glassfish 2.x/3.x 的自动部署。
你可以在设置Job的“构建后操作”部分添加“Deploy war/ear to container”
要注意的是,比如你自动部署到 Tomcat 上,那么它的 webapps 目录下 manager 需要保留,然后在 conf/tomcat-users.xml 文件中,添加如下内容
<role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <role rolename="manager"/> <role rolename="admin"/> <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status, admin, manager"/>
方法二:通过脚本
这种方式更自由,你可以写好一个脚本来做你希望的事情,然后通过Jenkins来远程启动这个脚本。
如果时执行Windows下的批处理,就选择“Execute Windows batch command”,如果是bash脚本,就选择“Execute shell”。
写脚本时,有写Jenkins的内部变量你可以使用,比如我们这个实验系统,有个页面就是介绍这些内部变量的 http://ci.abc.com/jenkins/env-vars.html/。
创建一个做集成测试的Job
这一类的Job一般是依赖某个Job(比如手动部署测试环境)构建后启动构建。所以我们在配置Job属性时配置:
展示报告
Jenkins 的插件已经覆盖了大部分的报告格式(测试报告、静态检查报告等),如果你使用了一个工具的报告格式是不常见。你可以尝试把格式转化为XUnit兼容的格式展示。或者可以将报告产生的XML文件结合 XLS文件通过 “HTML Publisher Plugin” 插件来展示。
关于 XSL 展示 XML ,有兴趣可以看看 http://www.ibm.com/developerworks/cn/xml/theme/x-xsl.html
交互风格的Job
这是个有趣的功能,比如上面我们说的用于自动部署的Job,如果常规的构建方式,我们只能构建最新的代码,如果我们希望能部署指定的某次提交到测试环境怎么办呢?我们可以设置“参数化构建过程”来实现(参数化构建的本质是在构建前让你和Job有个交互过程,交互结果以环境变量方法参与到Job的构建)。
首选参考前文,在主节点上安装git工具并且配置访问git服务器的私钥(id_rsa)到 .ssh 目录下。
编辑Job的属性,找到“参数化构建过程”添加一个“Git Parameter”。
执行后发现并没有列出git上的所有提交。
在“系统管理”→“System Log”中
查看“所有系统日志”得知,后台报错“No such file or directory”。我觉得这是Jenkins的一个Bug,我们配置Job是在奴隶节点上执行,它却在主节点上查找目录。关于这个问题我们用另一个方法来解决,我们欣赏一下在主节点构建的Job使用Git参数做参数化构建的效果。有一点要注意,这里虽然列出提交Id但不代表选择后会签出指定的这次提交代码,它只是将你选择的内容保存到你指定Name命名的环境变量里。
刚才说的另一个方法需要安装两个插件“Extended Choice Parameter plugin”和“Extensible Choice Parameter plugin”他们可以扩展参数化构建过程。
我们在 Jenkins 服务器上创建一个目录 /jenkins/tmp/,然后签出 javaMavenSample 项目的代码。
[root@svr80 ~]# mkdir /jenkins/tmp/ [root@svr80 ~]# cd /jenkins/tmp/ [root@svr80 tmp]# git clone ssh://git@172.16.12.83/home/git/git_home/javaMavenSample.git
在Jenkins的服务器上创建一个 /jenkins/tools/ 目录,然后在下面写一个脚本 genProject2Revision.sh,内容如下:
#!/bin/bash cd /jenkins/tmp/javaMavenSample /usr/bin/git pull echo "revision=\\" > /jenkins/tools/project2_revision.txt /usr/bin/git log --pretty=oneline | /bin/awk '{printf "%s,\\\n", $1}' >> /jenkins/tools/project2_revision.txt
设置crontab 让这个脚本每小时执行一次。
[root@svr80 tools]# crontab -l 0 * * * * /jenkins/tools/genProject2Revision.sh
这样我们每小时就会更新 project2_revision.txt 文件内容如下
现在设置Job,添加“Extended Choice Parameter”
再执行Job,可以选择了
这里做的选择只会将选择内容保存到 GIT_COMMIT 环境变量里,要希望签出选定的代码,创建一个Pre-build setup。
目前这个测试项目的提交历史如下
当我选择中间的那次提交 ed8ec8bf4966cf41b859b5f60dd0fc96f5797af2 时,执行结果如下:
当选择最早的那次提交 2f65720bb717c4e62ae9d2e34d521689e30cd463 时,执行结果如下,构建失败的原因参考上面的提交历史可知,那次提交时 settings.xml 文件还未添加。
发表评论
-
通过Maven和Jenkins插件解决Java项目的配置管理
2014-03-25 20:59 4407项目中的配置管理一直是一件麻烦的事情,就比如数据库来说:开发时 ... -
Jenkins使用经验谈5(用户的登录与权限设定等)
2013-10-24 18:47 16740用任务列表归类各个Job ... -
Jenkins使用经验谈3(管理节点)
2013-10-22 17:49 9627现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们 ... -
Jenkins使用经验谈2(系统设置及插件管理)
2013-10-21 17:58 5459现在我们点击左侧列表中的“系统管理”,咦?上面有两条提示唉? ... -
Jenkins使用经验谈1(一步一步搭建Jenkins环境)
2013-10-21 17:45 9222在公司使用 Jenkins 软件已经有一段时间了,走了很多弯路 ...
相关推荐
jenkins自动创建job.doc jenkins自动创建job.doc jenkins自动创建job.doc
4. **构建与触发Job**: 使用API可以触发Jenkins Job的构建,发送POST请求到`http://jenkins_url/job/your_job_name/build`,并附带参数`json={}`。如果需要参数化构建,可以在JSON中指定参数。 5. **获取Job信息*...
### Jenkins上手使用说明知识点 ...以上知识点涵盖了Jenkins的基本安装、配置、构建Job、远程任务执行、Pipeline的使用、证书配置等关键操作,以及一些高级特性的简单介绍,为初学者提供了一个全面的入门指南。
这个“jenkins使用文档.zip”将引导你一步步地设置和使用Jenkins,无论是新手还是有经验的开发者,都能从中受益,提升开发效率和软件质量。通过学习和实践,你将掌握如何利用Jenkins构建高效、可靠的软件交付流水线...
标题中的“Jenkins持续集成”是指使用Jenkins这一开源自动化服务器来实现软件开发的持续集成流程。持续集成(Continuous Integration,CI)是一种软件开发实践,它要求开发人员频繁地将他们的代码更改合并到主分支,...
Java Jenkins Web Service Client是用于与Jenkins CI服务器交互的一种客户端工具,它允许开发者通过编程方式执行Jenkins的各种操作,如创建、更新、删除Job等。这个客户端基于Java编写,能够方便地集成到Java项目中...
Jenkins 基础使用教程 Jenkins 是一个功能强大且广泛使用的自动构建工具,它可以帮助开发者自动化构建、测试和部署应用程序。在这篇教程中,我们将学习如何配置 Jenkins,使用 Maven 进行项目构建。 Jenkins 的...
4. **获取日志**:如果需要查看特定构建的日志,可以发送GET请求到`http://jenkins_url/job/job_name/lastBuild/consoleText`,返回的是纯文本格式的日志。 5. **配置job**:对于需要修改job配置的情况,可以发送...
本文将深入探讨如何使用Python与Jenkins集成,实现批量创建和修改Jenkins jobs的操作。Jenkins是一款流行的持续集成工具,用于自动化各种软件构建、测试和部署任务。通过Python的Jenkins库,我们可以编写脚本来自动...
在 Jenkins 的 Job 配置页面,找到“构建步骤”(Build Steps)部分,选择“添加构建步骤”(Add Build Step) > “执行 shell”(Execute Shell)。在这个 Shell 脚本中,你可以使用 `export` 命令来定义新的环境变量,...
在本文中,我们将详细探讨如何配置Jenkins来设置3个Job,这些Job之间可以相互触发,同时结合TAF(Test Automation Framework)进行自动化测试,确保代码质量。 **一、Jenkins Job的基本概念** Jenkins中的Job相当于...
### Jenkins 使用指南精简版知识点解析 #### 一、概述 - **持续集成(CI)的概念**:持续集成是一种软件开发实践,目的是确保项目的构建过程既稳定又高效。这一概念最早由Martin Fowler在大约十年前提出,其核心目标...
1. **新 Job 创建**:登录 Jenkins 界面,点击“新建项目”,选择合适的 Job 类型,如“自由风格软件项目”。 2. **配置源码管理**:连接 Git 或 SVN 等版本控制系统,指定仓库URL,设置凭证。 3. **定义构建触发器*...
在 Jenkins 中,您可以创建新任务,然后选择创建方式,例如从 SVN 仓库中下载代码。您需要填写 SVN 地址,如果有账号/密码,系统将弹出让您填写。然后,您可以配置构建触发器,例如每晚 8 点自动构建。 四、构建...
本文将详细介绍如何使用Python来调用Jenkins的接口,实现自动化任务的管理和执行。 #### 二、Python-Jenkins模块安装 Python-Jenkins是一个用于与Jenkins交互的Python库。它提供了一系列API来管理Jenkins实例,...
Jenkins创建用户并分配不同视图的权限
Jenkins中的Token使用 Jenkins是一款流行的自动化构建工具,提供了许多实用的功能来提高构建和部署的效率。在Jenkins中,Token是一种特殊的变量,可以在构建过程中动态生成不同的值。Token可以用来实现各种自动化...
jenkins中使用例子: #定义sonar项目名称 sonar_url=bus-pub #邮件接收人 send1=111111111@qq.com send2=222222222@qq.com send3= #重新下载对应项目扫描报告 rm -f ${JOB_NAME}.pdf wget ...
本文将详细介绍Jenkins的用途、特性、安装与配置方法,并且会介绍Jenkins在不同应用场景中的使用。 1. Jenkins简介 1.1 Jenkins的用途 Jenkins持续自动地构建(测试)软件项目,并能监控一些定时执行的任务。它可以...