使用 Jenkins 设置一个持续交付框架

本文介绍了 Jenkins 并展示了如何使用 Jenkins 设置持续交付框架。该框架可构建和扫描源代码,安装成功的构建内容,运行测试并自动发送结果。

Na Lv, 软件工程师, IBM

Na Lv 于 2010 年加入 IBM,从事智慧城市领域的自动测试和交付工作。她还对自动测试和部署框架很感兴趣。



Zhao Zhuo, 首席软件工程师, IBM

Zhao Zhuo 拥有智慧城市方面的解决方案部署经验,目前在从事持续部署领域中的自动部署工作。



Yan Zhe, 软件工程师, IBM

Yan Zhe 拥有医疗保健、化学、石油和智慧城市方面的数据集成和分析经验。Yan 还对应用集成技术和持续交付很感兴趣。



Chen Xiao Long, 首席软件工程师, IBM

Chen Xiao Long 拥有持续交付、全球化和自动化方面的经验,而且对数据挖掘和分析很感兴趣。



2015 年 6 月 17 日

简介

在持续交付流程中设置框架很重要。框架决定了 DevOps 的效率以及在持续交付流程中可以完成哪些工作。

本文提供了有关 Jenkins 的信息并演示了如何:

  • 使用 Jenkins 设置持续交付框架。
  • 将此方面的知识应用到持续交付框架中。
  • 使用 Jenkins 实现持续交付框架。

目标受众

本文的预期受众是从事持续交付或持续自动测试工作的软件工程师。要想按照本文中的步骤进行操作,您应该理解:

  • 脚本开发。
  • 软件开发流程。

Jenkins 概述

获得 Jenkins

  • 您需要拥有 Java Runtime Environment (JRE) 1.6 或更高版本
  • 下载 Jenkins.war

启动 Jenkins

  • 执行 java -jar jenkins.war

or

  • jenkins.war 部署到一个 Tomcat 容器中

Jenkins 是一个持续集成工具,通常用于软件开发工作。这种自动化的框架可运行重复的作业。Jenkins 可以管理和监视远程系统上的命令启动,还能执行可通过命令行运行的任何操作。Jenkins 将电子邮件、TestNG 和其他工具与支持插件集成起来。

安装 Jenkins 后(如果尚未安装 Jenkins,请参见侧栏内容),使用浏览器和 http://yourjenkinsmasterhost:8080 访问 Jenkins。

Jenkins 支持主/从模式。系统会将构建项目的工作负载委托给多个节点,允许单个 Jenkins 托管大量的项目,或者为构建/测试工作提供所需的不同环境。


设置和启用 Jenkins

在使用 Jenkins 之前,需要先配置它。在本文中,您将了解如何设置主/从模式、安装插件、配置项目以及配置变量/属性。

设置主和从机器

首先,在主机器(LinuxWindows)上安装 Jenkins,然后使用 Jenkins 主机器上的帮助内容设置从(Windows 或 Linux)机器。

Jenkins 主机器

进行管理/配置工作或者运行 Jenkins 作业的机器。

Jenkins 从机器

运行作业并由主机器管理的机器。

当主机器的工作负载过于繁重或者需要其他类型的机器来运行作业时,必须使用从机器。

Jenkins 内置了 SSH 客户端实现,用于同远程 sshd 和从代理进行通信。还有多种在主从机器之间进行通信的方式:

  • 对于 UNIX 从机器,可通过 SSH 进行通信。只需在从机器上安装 SSH 和 JRE。
  • 对于 Windows 机器,可以使用分布式组件对象模型( Distributed Component Object Model,DCOM)
  • 当主机器无法看到从机器时,可以通过 Java Web Start 使用单独的套接字连接。

在 Linux 上安装主模式

要在 Linux 机器上安装主模式,可以输入清单 1 中所列的命令。

清单 1. 在 Linux 机器上安装主模式
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

在 Windows 机器上安装主模式

要在 Windows 机器上安装主模式,可以输入清单 2 中所列的命令。

清单 2. 在 Windows 机器上安装主模式
java -jar jenkins.war

运行该命令后,访问 http://<hostname>:8080/,然后单击 Manage Jenkins > Install as Windows Service > Install

设置从模式

访问 http://<JenkinsMasterHost>:8080/ > Manage Jenkins > Manage Node > New Node 并根据从主机来配置从信息。Jenkins 主机器可以帮助您将 Jenkins 安装到从机器上。

对于 Windows 从模式,还有一个额外的命令:

清单 3. 额外的命令,Windows 从模式
sc.exe create "<serviceKey>" start= auto binPath= "<path to jenkins-slave.exe>" 
DisplayName= "<service display name>"

定义服务的注册表键名称是 <serviceKey><service display name> 是在服务器管理器界面中标识该服务的标签。

管理插件

插件是 Jenkins 中另一个重要的特性。目前,Jenkins 支持 1000 多个插件。您可以将这些插件分为多个不同的类别(源代码管理插件、构建报告插件、构建工具插件等)。利用各种插件,您可以在 Jenkins 中监视、部署或配置不同的作业。要管理这些插件,可以访问 https://JenkinsMasterHost:8080,然后选择 Manage Jenkins > Manage Plugins。其中有四个选项卡:

  • Updates:有更新内容的已安装插件
  • Available:可安装的插件
  • Installed:已安装的插件
  • Advanced:管理插件

通过 Internet 安装插件

Jenkins 主机器可以访问 Internet 时,安装插件工作很轻松。在 Available 选项卡上,选择要安装的插件。您可以通过 Installed 选项卡删除插件。单击 uninstall 按钮即可删除插件。

手动安装插件

如果 Jenkins 主机器无法访问 Internet,那么可以手动安装插件。 查找您要安装的插件,然后将所下载的 *.hpi/*.jpi 文件保存到 $JENKINS_HOME/plugins 目录中。重新启动 Jenkins 即可启用这些插件。

Jenkins 项目

Jenkins 支持四类项目:自由样式 (free-style)、专家 (maven)、多配置 (multi-configuration) 和外部作业 (external job)。自由样式项目是 Jenkins 的核心特性。可在 SCM 中将其与任何构建系统组合在一起。您也可以使用它完成软件构建以外的其他工作。

配置项目

进入 https://JenkinsMasterHost:8080,选择 New Item,指定 Item nameType 即可创建项目。

在项目配置页上,Item name 也称为 Project name。目前有四种条目 (item) 类型。您也可以选择选项 copy existing item,如图 1 所示。单击 OK 打开项目配置页。

图 1. 创建新条目
创建新条目窗口中的单选按钮

需要了解的配置页信息有:

Project name:如果项目名称已更新,那么条目名称也已更新。

Description:作业描述

Strategy:日志策略,保留多少日志

Parameterized:定义项目的各种变量。目前有不同类型的变量(文件参数、文本参数、字符串参数等)

Where:限制可在何处运行该项目

Advance configuration: 更多的规范,控制如何构建项目

您选择要安装的插件会影响项目中具有哪些类别和功能。一些类别和功能是:

  • 源代码管理:管理源代码的工具。
  • 构建触发器:触发一次构建工作的方法。
  • 构建:构建工作是项目中最重要的部分。您要指定运行一个项目的准确步骤。常见的步骤是在 Windows 下执行 DOS 命令,在 Lunux 下执行 Shell 命令。
  • 构建后的操作:构建完成后要执行的操作。构建完成后常见的操作是:发送电子邮件、触发其他构建工作,或者发布结果报告。

完成配置工作后,单击 Save。您会发现,已保存的项目被列在 https://JenkinsMasterHost:8080Jenkins > All 中。

触发项目

利用 Jenkins,您可以手动或自动开始构建项目。目前有不同的 机制 来触发一次构建工作。如果选择自动触发构建工作,那么可以在配置项目时的 Build Triggers 中定义选项。可用的选项有:

  • Build project after other projects are built: 在配置项目后,可以定义在此项目完成后是否构建其他项目。如果目前的项目依赖于其他项目,那么可以选择此选项。
  • Trigger builds remotely (e.g., from scripts): 从其他系统还是从主机触发项目构建工作。例如,您可通过电子邮件来触发项目构建工作,或者通过脚本提交一个构建请求。
  • Build periodically: 创建一个计划来定期构建项目,与配置中定义的一样。
  • Poll SCM:此选项根据源代码更改来构建项目。使用此选项时,要指定 Jenkins 轮询修订控制系统的频率。如果发现了源代码更改,就会开始构建项目。
图 2. Build Triggers 中的选项
Build Trigger 选项

点击查看大图

图 2. Build Triggers 中的选项

Build Trigger 选项

项目发布

从机器是指已被设置为从主机器上卸载构建项目的计算机。任务的分发是完全自动的。

准确的委托行为取决于每个项目的配置。如果将项目配置为 Restrict where this project can run,那么该项目只能在指定的机器上运行。其他项目可以选择在从机器间随意漫游,这些全都取决于配置。

目前,Jenkins 采用这些策略来分发项目:

  • 如果为项目配置了 Restrict where this project can run,那么只能在此处运行该项目
  • Jenkins 尝试在以前构建项目的同一台计算机上构建一个项目。
  • Jenkins 尝试将构建时间较长的项目移到从机器上。

设置变量/属性

全局属性

您可以在全局属性中设置环境变量(定义属性名和值)或工具位置: http://<JenkinsMasterHost>:8080,然后选择 Manage Jenkins > configuration。可以在 Jenkins 项目中使用这些属性。

环境变量

您可在项目中引用环境变量。选中 Environment variables 复选框,并定义变量的 namevalue ,如图 3 所示。

图 3. 定义环境变量
name 和 value 文本字段

工具位置

选中 Tool Locations 复选框。从下拉列表中选择工具 name 并定义该工具的 home 目录。可在项目中引用该工具。

图 4. 定义工具位置
tool locations、namen 和 home 字段

项目本地属性

项目本地属性只能在项目内部使用。配置一个项目时,可选择选项 This build is parameterized,如图 5 所示。选择该选项意味着允许函数以名称/值对的形式添加参数。您可使用这些参数作为项目的本地属性。

图 5. 设置本地属性
本地属性屏幕截图

点击查看大图

图 5. 设置本地属性

本地属性屏幕截图

实践:持续交付框架的结构和流程

持续交付的目标是确保用一种高效且高质量的方法来开发、测试、部署软件并最终将软件交付到生成环境中。采用持续交付方法后,对软件系统任何部分执行的每次更改(无论是在基础架构、应用还是自定义数据级别进行的更改),都会通过一个特定的交付管道将其持续地应用到生产环境中。

流程

持续交付需要快速且自动地部署各种更改集。完成部署或交付工作需要多个步骤。标准的流程是:

  • 开发人员交付各种更改
  • 源代码控制工具进行构建工作
  • 运行自动的测试工作
  • 安装构建内容

图 6 显示了持续交付流程。在计划好的时刻,启动 Jenkins 中的第一个项目。

项目 1
该项目中的首个任务是通过源代码管理工具(如 IBM® Rational Team Concert™)下载源代码。如果项目失败,则会发送一个电子邮件通知,告知失败情况并且停止所有其他项目。如果项目成功完成,则会开始处理下一个项目。
项目 2
IBM® Security AppScan® 检查项目 1 中下载的源代码是否有安全性问题。
项目 3
AppScan 项目完成后,构建工作开始。
项目 4
成功构建完成后,下一个项目是在构建验证测试(Build Verification Test,BVT)环境中安装该构建版本。
项目 5
在 BVT 环境中运行 BVT 测试案例。如果 BVT 测试成功通过,那么 Jenkins 会开始在开发和测试环境(项目 6 和 7)中安装该构建版本。
项目 6
在开发环境中安装构建版本并发送电子邮件通知。项目在开发环境中安装构建版本并准备好环境,这样开发人员可执行集成工作或开发工作。
项目 7
在测试环境中安装构建版本。在测试环境中安装构建版本后,Jenkins 会触发项目 8,以便运行功能验证测试(Functional Verification Test,FVT)。
项目 8
FVT 是一个自动测试列表,其中包括很多测试。FVT 测试通过后,会在生产环境中安装构建版本(项目 8)。
项目 9
您可以在位于云或 IBM® Softlayer® 中的客户本地服务器上安装生产环境。内外部用户都可访问该环境。

图 6 显示了持续交付框架流程。该项目成功完成后,会触发开始下一个项目。如果项目失败,那么流程将会结束并向订阅者发送电子邮件。

图 6. 持续交付框架流程
持续交付框架的流程图

持续交付框架的部署拓扑结构

图 7 的左侧显示了传统的开发部署。开发人员向诸如 Rational Team Concert (RTC) 等的源代码控制服务器提交更改集,然后构建服务器开始生成构建版本。

图 7 的右侧展示了持续交付流程。添加 Jenkins 以后,会有一个 Jenkins 主机器。Rational Team Concert 构建工具包已安装在该服务器上。Jenkins 主模式安装在 Rational Team Concert 插件中。它使用该构建工具包并通过 Rational Team Concert 下载源代码,同时触发构建工具包生成构建版本。AppScan 和 BVT 项目也在 Jenkins 主机器上运行。开发环境、测试环境和生成环境都作为 Jenkins 从机器提供服务。它们由 Jenkins 主机器控制,并运行安装项目。测试环境则运行功能验证测试项目。

备注
如果将项目与计算机绑定,就能更轻松地跟踪各种任务,因为不同的机器拥有不同的角色。

图 7. 持续交付框架的拓扑结构
开发和 Jenkins 流程

结束语

现在,您已了解了如何使用 Jenkins 设置持续交付框架。该框架可帮助开发人员和测试人员自动部署各种工作,节约其宝贵的时间。该框架还能帮助您尽早发现流程中的任何问题或缺陷。

参考资料

学习

获得产品和技术

讨论

  • 加入DevOps for the masses 社区,此社区面向对 DevOps 相关知识感兴趣的 IT 从业人员。
  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=DevOps, Rational
ArticleID=1008645
ArticleTitle=使用 Jenkins 设置一个持续交付框架
publish-date=06172015