配置面板——Manage Jenkins 界面

在 Jenkins 中,你可以用可视化的 Manage Jenkins 界面管理所有的系统配置。你也可以在 Jenkins 任何界面的搜索框输入 “manage” 直接到达界面。这个界面会因你安装的插件而发生变化,所以当你看到的比书中展示的多时,不要惊讶。

你可以在这个界面进行 Jenkins 服务器的各方面配置。页面上的每个链接可以导航到 Jenkins 服务器不同部分的配置界面,在这里讨论一些比较有意思的选项。

配置系统

你可以在这里管理在构建中使用的工具路径,例如:JDK,不同版本的 Ant 和 Maven,以及安全选项、邮件服务器和其他系统配置。你安装的众多 Jenkins 插件都将需要在这里进行配置——当你安装插件时,Jenkins 会动态地添加相关字段。

从硬盘加载配置

Jenkins 用 XML 文件存储所有它自己的以及构建作业的配置细节,并放在 Jenkins 的主目录,同样在这个目录下存储了所有的构建历史数据。如果你将构建作业从一个 Jenkins 实例迁移到另外一个 Jenkins 实例,或者是归档旧的构建作业,则需要添加或者删除对应的构建作业目录到 Jenkins 的 builds 目录。你不需要停掉 Jenkins 服务器——可以使用 “从硬件加载配置”(Reload Configuration from Disk)选项直接加载 Jenkins 系统和构建作业配置。如果有很多的构建历史数据,则这个处理会有一点慢,因为 Jenkins 不止加载构建配置,还会加载所有的构建历史数据。

管理插件

Jenkins 最好的特性是其扩展性架构。它拥有一个巨大的第三方开源插件生态系统,使你能够为构建服务器添加额外的功能,从支持不同的 SCM 工具,如:Git、Mercurial 或者 ClearCase,到代码质量和代码覆盖率度量报告。插件可以通过 Manage Plugins(管理插件) 界面进行安装、升级和卸载。注意卸载插件时需要谨慎,因为它可能会影响 Jenkins 实例的稳定性。

系统信息

这个界面显示所有当前 Java 系统属性和系统环境变量列表。在这里你可以查看 Jenkins 正在使用的 Java 版本,其下都有哪些用户,等等。你也可以查看 Jenkins 当前正在使用的正确环境变量设置。它主要用于故障排除,以便你能确保自己的服务器使用的系统变量及变量值和你预期的一样。

系统日志

通过系统日志界面可以很方便地实时查看 Jenkins 日志文件。此外,其主要用途是为你能订阅 RSS 多种级别的日志信息。比如:作为 Jenkins 管理员,你可能想订阅所有的错误和警告日志信息。

负荷统计

Jenkins 依据并发构建作业的数量和构建队列的长度(它会给出你的构建作业需要等待多久才可以执行)跟踪你的服务器繁忙情况。这些统计可以为你提供关于是否需要增加容量和扩展基础设施构建节点的依据。

脚本控制台

这个界面可以让你在服务器上执行 Groovy 脚本,它对于高级故障跟踪是非常有用的:高级故障跟踪取决于强大的 Jenkins 内部架构背景知识。它主要还是对插件开发者是 Jenkins 也可以很好地处理并行和分布式构建。在这个界面,你想要多少构建就可以配置多少。如果你使用分布式构建,并且搭建了分布式节点,则 Jenkins 支持节点并行执行。Jenkins 可以在一个位于另外机器的构建节点上执行它的构建作业。如果你需要关停 Jenkins,而当前 Jenkins 服务器正在运行,并且一个构建作业正在执行,则最好不要直接关停。若想彻底关停 Jenkins,你可以使用 Prepare for Shutdown(关机准备)链接来阻止任何新的构建请求。最终当所有的构建作业完成时,你将能彻底地关停 Jenkins。





配置系统环境

最重要的 Manage Jenkins 界面是 Configure System(配置系统)界面。在这里,你能设置 Jenkins 做日常工作的大部分必要工具。这个默认界面包含了多个部分,每部分涉及不同的配置区域或扩展工具。此外,当你安装插件时,大部分插件的系统级配置也同样在这个界面进行配置。

这个配置系统界面可为你提供 Jenkins 安装的全局参数的定义,以及构建流程所需的扩展工具。界面的第一部分允许你定义一些通用的系统级参数。

Jenkins 主目录显示在界面上,以供参考。这样,你就能检查自己正在使用的主目录是否正确。提醒一下,你可以在自己的环境里通过设置 JENKINS HOME 环境变量来改变这个路径。

System Message(系统信息)字段有几个有用的用途。这个文本内容会显示在 Jenkins 主页的头部。你能使用 HTML 标签,所以通过使用服务器名称和一段简短的用途描述来定制化你的构建服务器就会是一种非常简单的方式。你也能用它来为所有用户显示通知,比如:声明系统停机维护等。

静默期(Quiet Period)对于类似于 CVS 将文件逐个地进行提交而不是将文件组合在一起作为一个单一的原子事务进行提交的 SCM 工具是有用处的。通常,Jenkins 会在检测到源码库的一个变更时立刻会触发一个构建。然而,这不适用于所有情况。如果你正在使用类似于 CVS 的 SCM 工具,你不会希望 Jenkins 在有变更提交后就立刻开始构建,因为源码库需要等所有变更全部提交后才能保持一致状态。你可以使用静默期来避免这类问题。如果你在此设置了值,Jenkins 将在触发构建前等待设定的时长来确保变更都已提交。这有效确保在开始构建前所有的变更都提交了,并且源码库处于稳定的状态。

大多数现代版本控制系统,如:Subversion、Git 或 Mercurial 的提交方式都是原子性的。也就是说多个文件中的变更被作为一个单元提交到源码库中,从而使源码库一直保持稳定状态。然而,一些团队仍使用一种单一逻辑变更集分多次提交的操作方式。在这种情况下,你可以使用静默期来确保每次构建总是使用稳定的源码版本。

这里指定的静默期值实际上是默认作用于系统范围的,如果有需要,你可以分别为每个项目重新定义不同的值。

在此你还可以管理用户账号和用户权限,默认情况下,Jenkins 允许用户做任何事情。如果你想要更多限制性的方式,则需要在这里通过 Enable Security(开启安全)选项来激活 Jenkins 安全设置。





配置全局属性

Global properties(全局属性),部分可以让你集中管理用于所有构建作业中的定义变量。你能在这里添加很多你想要的属性,而且可以在你的构建作业中使用它们。Jenkins 将使它们在你的构建作业环境中生效,所以你可以任意地在自己的 Ant 和 Maven 构建脚本中使用它们。注意属性名字中不能包含句点 “.”,因为这样不能被正确处理,所以 ldapserver 或 ldap_server 都可以,但是 ldap.server 不行。

你通常有两种使用这些属性的方式。首先,你能在自己的构建脚本中直接使用它们,写法为 ${key}$key (上面的例子可写成 ${ldapserver}$ldap_server)。这是最简单的使用方法,但是意味着在你的构建作业配置和构建脚本间有着深度的耦合。

如果你的脚本使用不同的属性名字(例如:包含点号),你也可以将值放入构建作业配置里的脚本中。我们把定义中的 ldapserver 属性值放入 Maven 构建作业中。使用 -D 选项意味着在构建脚本里可以访问这个值。这是一种灵活的方式,因为我们可以在 Jenkins 中为脚本定义全局属性,然后在构建脚本中使用那些变量。例如:Ldapserver 属性可以在 Maven 构建中通过内部的 ${ldap.server} 属性进行访问。

配置 JDK

总的来说,Jenkins 的最重要用途之一是用于构建 Java 应用。所以,Jenkins 自然为 Java 提供了优秀的内置支持。

默认情况下,Jenkins 使用在系统路径上查找到的任意 Java 版本去构建 Java 应用,通常是 Jenkins 自己正在使用的版本。然而,对于一个生产构建服务器,你可能想要更多的控制权。例如:由于性能的原因,可能你的 Jenkins 服务器运行在 Java 6 上,但是你的生产服务器却可能正运行在 Java 5 或者 Java 1.4 上。大型机构对于其生产环境 Java 版本的升级往往是谨慎的,并且市场上一些相对重量级的应用服务器对最新版的 JDK 验证是出了名的慢。

在任何情况下,使用一个接近生产服务器上运行的 Java 版本往往是明智的做法。尽管一个应用程序使用 Java 1.4 编译通常可以稳定地在 Java 6 上运行,但反之则不行。或者你可能有不同的应用需要使用不同的 Java 版本进行构建。

Jenkins 提供了与多个 JVM 协作的良好支持。事实上,Jenkins 让配置和使用众多 Java 版本变得很容易。像大多数系统级的配置一样,我们在配置系统界面(Configure System)进行配置。在这里,你将找到一段关于 JDK 的配置,在此你可以管理需要与 Jenkins 一起协作的 JDK。

最简单的声明一个 JDK 的方式是提供一个恰当的名字(在之后配置你的构建时,用于指定这个 Java),以及 Java 安装的路径(和 JAVA HOME 变量一样的路径)。尽管你需要手动输入路径,但 Jenkins 将实时地检查这个路径是否存在并且检查其是否是个有效的 JDK 目录。

你也可以让 Jenkins 为你安装 Java。在这种情况下,Jenkins 将下载 JDK 安装包并且在你的机器上安装一份拷贝。第一次构建时需要使用 JDK,Jenkins 将下载指定 JDK 版本并将其安装到 Jenkins 主目录下的 tools 目录中。如果构建正运行在一个没有安装 JDK 的新构建代理上,它还会下载 JDK 并安装到代理机器上。

这也是一个配置代理服务器非常好的方式。Jenkins 可以将构建工作委托给其他机器,或者创建代理。构建代理(又名 “从节点”)是指 Jenkins 可以用来运行一些构建作业的其他机器。如果你使用 Jenkins 的自动安装选项,则无须手动地在构建代理机器上安装你需要的 JDK 版本,Jenkins 会在第一次用到时自动完成安装。

默认情况下,Jenkins 建议从 Oracle 网站下载 JDK。如果你的 Jenkins 服务器由代理服务器代理,那么你可能需要进行代理配置,以确保 Jenkins 可以访问外部下载网站。另一种方法是提供一个 URL 指向自己内部的 JDK 副本(一个 ZIP 或 Gzip 压缩的 TAR 文件),其存储在内部的一个本地服务器上。在这里还可以提供在本地服务器上的标准安装文件,以使其更加快速地自动安装。当你使用这个配置项时,Jenkins 还会让你指明一个标签,将用于限制只有带有这个标签的构建节点可以使用。

当你需要在一些特定构建机器上安装一个工具的特定版本时,这是一个有用的方法。同样地,这也可以应用于其他构建工具(比如:Maven 和 Ant)。

自动安装程序不能在所有工作环境(例如:如果在操作系统上无法找到或识别到所需要满足的条件,则可能安装会失败)下工作,但它依然是一个用来搭建新的构建服务器或者分布式构建代理服务器有用且方便的方式。

配置构建工具

构建工具是任何构建服务器的基础,Jenkins 也不例外。Jenkins 支持三个主流构建工具:Ant、Maven 和基本的 Shell 脚本(或 Windows 批处理脚本)。通过使用 Jenkins 插件,你还能为其他的构建工具和其他语言添加支持,如 Gant、Grails、MSBuild 等。

Maven

Maven 是一个高级 Java 构建脚本框架,它使用标准目录结构和标准的生命周期,协定统一配置,并通过声明依赖管理来简化很多在 Ant 中存在的典型低级脚本。在 Maven 中,你的项目使用标准、优化定义的生命周期——编译、测试、打包、部署等。每一个生命周期阶段都一一对应着 Maven 插件。多种多样的 Maven 插件都使用标准目录结构,在最小化干预下执行任务。你也可以通过配置其他插件覆盖默认插件来扩展 Maven。

Jenkins 为 Maven 提供了很好的支持,并精通 Maven 项目结构和依赖关系。你可以自动安装指定的 Maven 版本(就像我们 Maven 3 的例子),或是提供一个本地 Maven 安装路径。你可以为构建项目配置你需要的多个 Maven 版本,并为不同的项目使用不同的 Maven 版本。

如果你勾选 Install automatically 复选框,Jenkins 将下载并安装对应的 Maven 版本。你可以让 Jenkins 从 Apache 网站直接下载 Maven,或从本地选择路径。当你使用分布式构建时,这是一个很好的选择,因为 Maven 是交叉平台,它可以工作在任何一台机器上。你无须在首次使用 Maven 时在每台机器上进行安装,Jenkins 会自动下载并将 Maven 安装到其主目录下的 tools 目录中。

有时你需要将 Java 系统参数传给 Maven 构建进程,比如:经常用于 Maven 中类似代码覆盖或生成站点等一些比较耗内存的作业时。你可以通过设置 MAVEN_OPTS 属性进行配置。在 Jenkins 中,你可以设置系统级范围的默认值,并可在所有项目中调用。如果你想在所有项目中使用标准内存选项(例如),则无须手动在每个项目中做设置。

Ant

Ant 是一个被广泛应用并且非常知名的构建 Java 的脚本语言。它是一种应用于大量开源项目中灵活、可扩展、相对简单的脚本语言。一个 Ant 构建脚本(通常是 build.xml)由多个 target 组成。每个 target 在构建过程中负责执行特定的工作,比如:编译你的代码或运行你的单元测试。它是通过执行任务来做到这一点的,这些任务会执行构建作业的指定部分,比如:调用 javac 编译代码,或创建新目录。target 之间也有依赖(dependency),来指明构建作业的执行顺序。例如:编译代码需要在执行单元测试之前进行。

Jenkins 为 Ant 提供了优秀的内置支持,可以从构建作业中直接调用 Ant 的 target,提供属性来定制流程。

如果 Ant 存在于系统中,则 Jenkins 可以查找到它,然后,如果你想知道自己正在使用的是哪个 Ant 版本,或你需要分别为不同的构建作业使用不同的 Ant 版本,则可以配置安装所有你需要的 Ant 版本。只需在配置系统界面中的 Ant 配置处提供一个名字和安装目录即可。之后,你将可以为自己的每个项目指定需要的 Ant 版本。

如果你勾选 Install automatically 复选框,Jenkins 将下载 Ant 并安装到 Jenkins 主目录下的 tools 目录中,这与 Maven 一样。它将在构建作业第一次使用 Ant 时,从 Apache 网站或是本地路径下载一个 Ant 的安装文件。同样,这是一个很好的可以让构建服务器达到标准化的方法,并能使在已有架构上添加新的分布式构建服务器变得更容易。

Shell 脚本

如果你的构建服务器是运行在 UNIX 或 Linux 上的,则 Jenkins 支持在构建作业中添加 Shell 脚本。这可以方便地解决那些你不想在 Ant 或 Maven 中执行底层、系统相关的作业。在 Shell 配置部分,执行 Shell 脚本时将使用你定义的默认 Shell。默认情况下,就是 /bin/sh,但是有时你可能想要修改成 bash 或是 Perl 等其他的解释器。

在 Windows 中,Shell 配置部分不适用——你需使用 Windows 批处理脚本代替它。所以在 Windows 构建服务器上, 应该让这个配置项保留空白。





配置版本控制工具

Jenkins 预装了 CVS 和 Subversion 的插件。其他版本控制系统插件可以通过 Manage Plugins 界面进行下载。

配置 Subversion

Subversion 无须特殊的配置,因为 Jenkins 使用本地 Java 库与 Subversion 仓库进行交互。如果连接到仓库需要验证,则 Jenkins 会在你进入 Subversion 的 URL 时,在构建作业配置处进行提示。

配置 CVS

CVS 只需很少的配置或根本无须配置。默认情况下,Jenkins 将在系统路径上查找像 CVS 这样的工具;如果它不在系统路径上,你也可以提供明确的路径。CVS 将登录账号和密码等细节信息保留在一个叫 .cvs pass 文件中,通常这个文件在你的 home 目录中。如果并非如此,则你可以提供一个让 Jenkins 能够找到这个文件的路径。





配置邮件服务器

最后一个你需要在基本配置选项界面做设置的是邮件服务器。email 是 Jenkins 最基本的通知技术——在一个构建失败后,它将给提交代码变更的开发人员及可选的其他团队成员发邮件。所以,Jenkins 需要知道你的邮件服务器。

系统管理员的 email 地址是 Jenkins 发送通知的邮件发送方。你还可以单击 Test configuration(测试配置)按钮来检查它,Jenkins 会发一个测试邮件到这个地址。

在许多机构中,你可以获得用户登录名加其机构域名的 email 地址。例如:在 ACME 中,用户 JohnSmith 有一个登录名 “jsmith” 和一个 email 地址 “jsmith@acme.com”。如果延伸到版本控制系统,Jenkins 可以节省大量的配置工作。在前面的示例中,你可以简单地指定 acme.com 作为默认用户 email 的后缀,然后 Jenkins 会补全剩余部分。

你还需要给 Jenkins 服务器(不适用 localhost)提供一个 URL,Jenkins 将这个 URL 放入通知邮件中,以便用户可以直接从 email 中链接到 Jenkins 的构建失败界面。

Jenkins 还提供了更复杂的邮件配置,使用如 SMTP 认证和 SSL 等高级特性。可以通过单击 Advanced(高级)按钮来配置这些选项。

例如:很多机构使用 Google Apps 的邮件服务,你可以配置 Jenkins 与 Gmail 服务协作。你需要做的就是使用 Gmail 的 SMTP 服务器并在 SMTP 认证中提供你的 Gmail 用户名和密码(你还需要使用 SSL 和非标准端口465)。





配置代理

在大多数企业环境中,Jenkins 服务器是在防火墙之后的,也不会直接访问互联网。Jenkins 需要上网从外部站点下载插件和更新,或是安装诸如:JDK、Ant 和 Maven 等工具。如果你需要通过一个 HTTP 代理服务器上网,则可以在 Configure System 界面的高级(Advanced)中配置链接细节(服务器和端口,以及可能需要的用户名和密码)。

如果你的代理使用微软 NTLM 身份认证方案,那么你需要提供域名和用户名。你可以在用户名输入框中加入这两项:输入域名,其后紧跟一个反斜杠 “\”,再跟用户名,就像 “My Domain\Joe Bloggs” 这样。

最后,如果你是在 Jenkins 构建服务器上设置代理的话,则请注意,所有服务器上运行的工具最好也都配置此代理。特别是像 Subversion(如果你访问外部的仓库)和 Maven(如果你没用企业级仓库管理器)这类的工具。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐