本文共 9044 字,大约阅读时间需要 30 分钟。
Jenkins 是 Continous Integration Server,是 Hudson 的继续。 类似的产品: Bamboo,BuildBot,TeamCity,BuildForge 等。
Jenkins的
容易安装,只需要执行 Java -jar jenkins.war, 或者直接部署到服务器中。
Java 8或者11 (JRE和Java Development Kit (JDK) 都可以)。
链接:http://mirrors.jenkins.io/war-stable/latest/jenkins.war
java -jar jenkins.war --httpPort=[端口号]
打开浏览器(推荐Chrome),访问 http://localhost:[端口号]
Jenkins 的主要功能是监视重复工作的执行,例如软件工程的构建或需要反复运行的自动化测试。
具体地:
此时 Jenkins 与 CruiseControl 或 DamageControl 相似。本质上提供了一个易于使用的持续集成系统,使 得开发人员更容易地将改变集成到工程中,使得用户更容易获得一个新的 build。自动化,持续的构建提高了软件开发的效率。
例如 cron jobs 或 procmail jobs,即使这些 jobs 是运行在远程的机器上。例如,对于 cron,你将会收到 email 包含 job 的 output,你需要检查 email 来确认是否 job broke。Jenkins 将保持这些 outputs 且使得你更加容易地注意到 job 的 broke。
jenkins 可以完全地通过友好的 web GUI 来配置,且配置页面支持配置项的错
误检查和很好的在线帮助。不需要手动地编辑 xml 的配置文件,但是 jenkins 也支持手动
修改 xml 配置文件。
Jenkins 能够从项目的仓库(例如SVN,Git等等)生成最近修改的集合列表,且改方式非常有效,不会增加 Subversion/CVS Repository的负载。
Jenkins 对于大部分页面都生成清楚的可读的永久的链接,例如''latest build"/"latest successful build",因此可以容易地在其他的地方引用 jenkins 的生成的pages。
可以通过 RSS,EMail 或 IM 来实时地监视 build 的失败。
支持在 build 完成后 tag 或重 tag。
能够很好地显示各种测试的报告,且可以生成失败的趋向图。也可以根据测试报告的xsl文件(样式文件)对测试报告进行解析。
Jenkins 能够分发 build/test 的负载到多台机器,能够更好地利用硬件资源,缩短 build 的时间。
Jenkins 可以标识 build 产生的文件,例如 jars。
jenkins 可以通过第三方的插件来扩展。
支持几乎所有的平台:
JavaHelloworld 运行在 master,即 Jenkins 所在的机器。
Ant 构建脚本:c:JavaHelloWorldbuild.xml
Java 的 helloworld: c:JavaHelloWorldsrcoatahelloworld.java
package oata;public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }}
在 ie 中打开 http://localhost:8080,单击 new job 链接,为 javahelloworld 新建 job,且编译 job 的配置如下:
注意 jenkins 默认已经安装了 svn 的 plugin 了
进入 JavaHelloWorld 的主页面,点击 build now 链接进行 build,build 后可以在此主页面
上看到所有的 build 历史,如下:
然后还可以点击某个 build 的链接,查看某个 build 的详细日志,如下:
参考:http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html
默认地在 C:Documents and SettingsAAA.jenkins。
.jenkins
├─jobs
│ └─JavaHelloWorld
│ ├─builds
│ │ ├─2011-11-03_16-48-17
│ │ ├─2011-11-03_16-49-05
│ │ ├─2011-11-03_16-49-29
│ │ ├─2011-11-03_17-01-49
│ │ └─2011-11-03_17-11-42
│ └─workspace
│ ├─build
│ │ ├─classes
│ │ │ └─oata
│ │ └─jar
│ └─src
│ └─oata
├─plugins
├─usercontent
├─war
可以通过设置环境变量来修改,例如: set JENKINS_HOME=C:jenkins
然后重新启动 jenkins。
只需要备份 JENKINS_HOME 下的所有文件和文件夹,恢复的时候需要先停止 jenkins。
对于移动或删除 jobs,只需要简单地移动或删除%JENKINS_HOEM%jobs 目录。
对于修改 jobs 的名字,只需要简单地修改%JENKINS_HOEM%jobs 下对应 job 的文件夹的名字。
对于不经常使用的 job,只需要对%JENKINS_HOEM%jobs 下对应的 jobs 的目录 zip 或 tar后存储到其他的地方。
如下:
http://[jenkins-server]/[command]
命令可以为:
exit shutdown jenkinsrestart restart jenkinsreload to reload the configuration
--httpPort=$HTTP_PORT,用来设置 jenkins 运行时的 web 端口。
--httpsPort=$HTTP_PORT,表示使用 https 协议。
--httpListenAddress=$HTTP_HOST,用来指定 jenkins 监听的 ip 范围,默认为所有的 ip 都可以访问
此 jenkins server。
如果Jenkins所在的server的timezone不同于用户的timezone,这时候需要修改 jenkins 的timezone,需要在 jenkins 启动的时候增加下列参数:
-Dorg.apache.commons.jelly.tags.fmt.timeZone=TZ
例如 startjenkins.bat
set JENKINS_HOME=c:jenkinscd /d %JENKINS_HOME%java -jar %JENKINS_HOME%jenkins.war --httpPort=8000
如果 jenkins 是部署在 servlet 容器中,例如 apache,tomcat 中。因为 servlet 容器一般都在后台运行,所以 jenkins 也就已经在后台运行了。
对于Windows用户需要在Jenkins的管理页面中点击 insall as windows service 来将Jenkins部署为 service。但是感觉比较好的方法还是手动将启动Jenkins 的脚本部署为Windows Service,从而可以更灵活地设置更多的参数。
可以在Jenkins 的管理页面下的系统信息中,查看所有的 jenkins 的信息,例如Jenkins的启动配置,所依赖的系统的环境变量,所安装的plugins。
参考:https://wiki.jenkinsci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+machines
注意 Jenkins 中 slave 称为 node。 所以下面文章中的slave和node指的是一回事。
在 Manage Jenkins-->Manage Nodes -->New Node 下:输入 Node Name,且选择Dumb Slave作为Slave 的类型,然后 OK。
在 Slave 的配置页面,输入如下:
在Slave所在的机器登录Jenkins master,且进入Manage Jenkins-->Manage Nodes-->新
建的 Note,点击 launch,然后安装 slave 为 service 如下:
安装成功后显示如下:
对上面的 slave 增加 label,从而表示此 slave 的用处,且同时对 uage 选择 leave this machine for tied jobs only:
对 Jenkins 构建 JavaHelloWorld 中的 job 修改如下:
选择 restrict where this project can be run 且输入 note(slave)的 label;
另外注意 SVN 的地址因该正确,jenkins 会提示输入 svn 的用户名和密码。
此时 job 将会在slave所在的机器运行,当然 build 所需要的环境要在slave上配置好,运行如下:
注 意: 对Slave系统环境变量的修改,Jenkins slave 不会立即生效,需要重启Jenkins Slave Service。
参考:
https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds
http://community.jboss.org/wiki/HudsonWindowsSlavesSetup
作为 slave 的 Linux 机器为 centos 系统。
创建Jenkins用户
sudo /usr/sbin/useradd -m jenkins -d /home/jenkins
查看Jenkins 用户及组的信息 id jenkins
uid=506(jenkins) gid=506(jenkins) groups=506(jenkins)
使用 sudo /usr/bin/passwd jenkins 来设置用户 jenkins 的密码为 0;
切换到用户 jenkins 环境下
su - jenkins
安装 ant
yum install ant
确保当前用户为 jenkins
执行 ssh-keygen 来创建 public/private key pair,直接 enter,表示 key将存储在/home/jenkins/.ssh/id_rsa 下,再直接 enter,表示不设置密码,再次 enter 确认密码为空;
创建 authorized_keys
cd .sshcat id_rsa.pub > authorized_keyschmod 700 authorized_keys
将 id_rsa(相当于 privatekey)拷贝到 jenkins master 机器上,例如 c:jenkinsid_rsa 下。
确保 jenkins 中 ssh slave plugin 正确安装,一般默认安装。
然后 lunch slave,使得 master 和 slave 通过 ssh 成功连接。其实 launch 的时候 jenkins 自动地从http://yourserver:port/jnlpJars/slave.jar拷贝slave.jar 到 slave,然后通过命令运行
java -jar slave.jar
来运行 slave。
且需要修改 JavaHelloWorld job 的 Label 为 JavaHelloWorldLinux 来使用此 slave,运行如下:
Master/Slave相当于Server和agent的概念。Master 提供 web 接口让用户来管理job和slave,job可以运行在master本机或者被分配到slave上运行。一个master可以关联多个slave用来为不同的job或相同的job的不同配置来服务。
当job被分配到slave上运行的时候,此时master和slave其实是建立的双向字节流的连接,其中连接方法主要有如下几种:
Jenkins 内置有 ssh 客户端实现,可以用来与远程的 sshd 通信,从而启动 slave agent。这是对unix系统的slave最方便的方法,因为unix系统一般默认安装有 sshd。在创建ssh连接的 slave 的时候,你需要提供slave的host名字,用户名和ssh证书。创建public/private keys,然后将public key拷贝到slave 的~/.ssh/authorized_keys 中,将 private key 保存到master上某ppk文件中。Jenkins将会自动地完成其他的配置工作。
对 于Windows的Slave,Jenkins可以使用Windows2000及以后内置的远程管理功能(WMI+DCOM),你只需要提供对 slave 有管理员访问权限的用户名和密码,Jenkins将远程地创建Windows Service然后远程地启动和停止他们。
对于Windows 的系统,这是最方便的方法,但是此方法不允许运行有显示交互的GUI程序。
如果上面成套的方法不够灵活,你可以实现自己的脚本来启动 slave。你需要将启动脚本放到master,然后告诉Jenkins Master 在需要的时候调用此脚本来启动 slave。
典型地,你的脚本使用远程程序执行机制,例如SSH,RSH或类似的方法(在Windows,可以通过cygwin 或 psexec 来完成),在脚本的最后需要执行类似 java -jar slave.jar 来启动 slave。slave.jar 可以从http://yourjenkinsserver:port/jnlpjars/slave.jar 下载,从而保证 slave.jar 正确的版本。 但是如果使用 ssh slave plugin 的话,此 plugin 将自动地更新 slave.jar。
jave web start(jnlp)是另一种启动 slave 的方法。用这种方法你需要登录到 slave,打开浏览器,打开Slave 的配置页面来连接。还可以安装为Windows Service 来使得Slave在后台运行。
如果你需要运行的程序需要 UI的交互,使用下面的方法:在 slave 系统上创建 jenkins 用
户,设置自动登录,在系统的 startup items 增加 slave JNLP 文件的快捷方式,使得 slave
在系统登录的时候自动启动。
此方式类似于 java web start,可以方便地在*unix 系统上将 slave 运行为 daemon。需要配置 slave 为 JNLP 类型连接,然后在 slave 机器上执行
java -jar slave.jar -jnlpUrl http://yourserver:port/computer/slave-name/slave-agent.jnlp
#!/bin/bash JAVA_HOME=/opt/SUN/jdk1.6.0_04 PATH=$PATH:$JAVA_HOME/bin exportPATH java -jar /var/jenkins/bin/slave.jar
Jenkins作为一款开源的CI/CD工具,结合插件使用,功能已经十分强大。可以满足大部分中小公司的需求。
美中不足的是,Jenkins对于artifact(编译产物)的管理做的不是很好,即使使用插件,这方面的短板还是无法的大力解决(Bamboo做的就很好)。所以在这里就不得不说到另外的两个工具,JFrog和Nexus。
下次继续。
转载地址:http://cowra.baihongyu.com/