JAVA开发iOS 持续化集成jenkins

Jenkins 功能分析与整理

2017-04-25  本文已影响1380人  58bc06151329

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

分析整理的版本是:Jenkins 2.7.4 版本。

Jenkins 的主要目标是监控软件开发流程,快速显示问题,保证开发人员以及相关人员省时省力提高开发效率。CI 系统在整个开发过程中的主要作用是控制:当系统在代码存储库中探测到修改时,它将运行构建的任务委托给构建过程本身。如果构建失败了,那么 CI 系统将通知相关人员,然后继续监视存储库。它的角色看起来是被动的;但它确能快速反映问题。

Jenkins 特点:

环境的搭建

安装JDK

yum install java-1.6.0-openjdk-devel*
yum install java-1.7.0-openjdk-devel*

配置Git

安装maven

配置环境变量

安装 Jenkins

rpm -ivh jenkins-2.7.4-1.1.noarch.rpm

注意:不重启不能访问首页。可以关闭 HTTP 访问方式,打开 HTTPS 访问方式。

java -jar jenkins.war -httpsPort=8443 -httpPort=-1

不修改为 root 权限,后续脚本中如果涉及 root 目录或者权限的情况,将提示没有权限。

注意:不关闭防火墙,无法访问首页。

序号 授权策略
1 任何用户可以做任何事(没有任何限制),包括为登录的用户也可以做相关操作。
2 登录用户可以做任何事(登陆后的用户都拥有管理员的权限)
3 遗留模式,登录的用户只有查看的权限(除管理员以外)。
4 安全矩阵,统一配置授权策略。
5 项目矩阵授权策略,跟安全矩阵配置完全相同,唯一区别在于可以在Job的配置页面再次配置。(选择Job → General → 启用项目安全)

Jenkins 实现持续集成相关配置

JDK 相关配置

配置 JDK 安装目录(JAVA_HOME)

JDK 配置成功的情况下,修改 JDK 路径,通过界面修改,重启 Jenkins,可能存在无效的情况。可以直接修改 config.xml 配置文件中的 JDK 路径,再重启 Jenkins 后生效。推荐使用 1.7 版本,因为某些插件需要 JDK1.7 的支持,比如:Monitoring 插件。config.xml 在 /var/lib/jenkins 目录下。JDK 选择自动下载,会出现卡死状态,是因为 Jenkins 在未发现 JDK 的情况下,会自动下载,但是 Oracle 对程序自动下载做了限制,会导致下载失败。

Git 相关配置

注意:不拷贝至 /var/lib/jenkins/.ssh 目录下也可以,但是密钥文件所在目录必须有 jenkins 访问权限。

Maven 相关配置

注意:必须配置,否则 Jenkins 运行脚本的环境变量中,无法加载maven目录。进行过以下尝试:

序号 描述
1 修改 etc/bashrc 文件,增加环境变量,Jenkins 运行无法获取 MAVEN_HOME。
2 修改 etc/profile 文件,增加环境变量,Jenkins运行无法获取 MAVEN_HOME。
3 修改 etc/passwd 文件中 jenkins 用户权限,Jenkins运行无法获取 MAVEN_HOME。
4 Jenkins 以 root 权限运行,Jenkins 运行无法获取 MAVEN_HOME。
5 将脚本放到 /var/lib/jenkins 目录下,Jenkins运行无法获取 MAVEN_HOME。

构建项目

远程登录执行 shell

变量名称 含义 返回示例
BUILD_NUMBER 构建任务的编号 6
BUILD_ID 构建任务的ID 6(1.597版本后,与BUILD_NUMBER相同)
BUILD_DISPLAY_NAME 构建任务显示名称 #6
JOB_NAME 构建项目名称 bar/foo
JOB_BASE_NAME 构建最底层项目名称 foo
BUILD_TAG 构建任务标签 jenkins-${JOB_NAME}-${BUILD_NUMBER}
jenkins-bar/foo-6
NODE_NAME 是构建在宿主上,则master,节点上则名称 master或者节点名称
NODE_LABELS 节点分配表 master或者节点分配表(空格隔开)
WORKSPACE 工作空间 /var/lib/jenkins/workspace/foot/
JENKINS_HOME Jenkins 安装目录 /var/lib/jenkins/
JENKINS_URL Jenkins 主页 http://server:port/
BUILD_URL 构建任务地址 http://server:port/jenkins/job/foo/6/
JOB_URL 构建项目地址 http://server:port/jenkins/job/foo/
EXECUTOR_NUMBER 构建状态 0:正在执行,1:没有执行

这些环境变量可以在 Shell 或 Batch 脚本中被使用,以 JOB_NAME 环境变量为例:

序号 说明
1 在 Shell 中:$JOB_NAME。
2 在 Batch 中:%JOB_NAME%。
3 在 Ant 插件中:$JOB_NAME。
4 在 Ant 的 build.xml 中:${JOB_NAME}。
5 在 Maven 的 pom 中使用:${env.JOB_NAME},Maven 中引入环境变量的值。
引入 pom 中的变量通过 project.*,引入 settings.xml 中的变量,用settings.*。

执行 Jenkins CLI 命令

邮件通知配置

监控

构建状态
颜色 状态
蓝色 完成构建,被认为是稳定构建。
黄色 完成构建,被认为是不稳定的构建。
红色 构建失败。
灰色 禁用了构建。
构建稳定性

图例可以在:http://localhost:8080/legend 中查看。

插件相关

推荐模版:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
   <td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
   <td><h2><font color="#0000FF">构建结果 - ${BUILD_STATUS}</font></h2></td>
</tr>
<tr>
   <td><br /> <b><font color="#0B610B">构建信息</font></b> <hr size="2" width="100%" align="center" /></td> 
</tr> 
<tr>
<td> 
     <ul> 
          <li>项目名称&nbsp;:&nbsp;${PROJECT_NAME}</li>
          <li>构建编号&nbsp;:&nbsp;第${BUILD_NUMBER}次构建</li>
          <li>SVN&nbsp;版本:&nbsp;${SVN_REVISION}</li>
          <li>触发原因:&nbsp;${CAUSE}</li>
          <li>构建日志:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
          <li>构建&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li>
          <li>工作目录&nbsp;:&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
          <li>项目&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
     </ul> 
</td> 
</tr>
<tr>
     <td>
          <b><font color="#0B610B">Changes Since Last Successful Build:</font></b>
          <hr size="2" width="100%" align="center" />
     </td> 
</tr> 
<tr> 
     <td>
         <ul> 
              <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
         </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:
         <br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="&nbsp;&nbsp;&nbsp;&nbsp;%p"} </td> 
</tr>
<tr>
     <td>
          <b>Failed Test Results</b> <hr size="2" width="100%" align="center" />
     </td> 
</tr>
<tr>
     <td>
          <pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> <br />
     </td>
</tr>
<tr>
     <td><b><font color="#0B610B">构建日志 (最后 100行):</font></b> <hr size="2" width="100%" align="center" /></td>
</tr> <!-- <tr> <td>Test Logs (if test has ran): <a href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a> <br /> <br /> </td> </tr> --> 
<tr>
<td>
     <textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea> 
</td> 
</tr>
</table>
</body>
</html>

忘记密码补救

#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS

上面内容是密码:111111 的加密内容。修改后再登录即可。

分布式构建

可以让同一套代码,在不同的环境(Windows,Linux 系统)中,编译与测试等。最终将构建的产物自动拷贝到主节点。

注意:不建议使用标点符号和中文(中文命名没有问题,但 Job 中无法引用)

可以新建节点或从已存在的节点中复制一份配置(如果存在节点才会显示)

节点配置项如下:

注意:如果目录不存在,会自动创建目录。你必须对该目录有读写权限,不然会报错:

hudson.util.IOException2: Failed to copy xxxx

迁移和备份

只需要迁移或者备份 JENKINS_HOME 中内容即可。

上一篇下一篇

猜你喜欢

热点阅读