如何在 CentOS 7 上为持续开发集成设置 Jenkins

介绍

合并代码 协调发布 确定构建状态 保持更新 如果您了解这些过程的挫折程度足以使单词本身造成头痛,您可能想看看Jenkins CI。

维持任何项目,特别是由几个团队成员同时开发的项目,以及可能包含许多功能,组件,语言和环境的项目,在最好的时候是一个斗争,在最坏的情况下需要超人的成就来保持浮动。

Jenkins 基本上是一个持续整合的解决方案 - 即将所有代码连续合并到一个中央构建的做法 - Jenkins 作为您项目的运营总部。

在其核心上,Jenkins做两件事:自动集成和外部构建监控,这意味着它可以极大地简化保持代码可维护的过程,并密切关注构建的质量,确保您在一些开发人员合并代码之前不会产生不愉快的惊喜。

让我们下来到Nitty Gritty,并了解Jenkins看起来像什么,以及如何使用它。

前提条件

要遵循本教程,您将需要以下内容:

本教程中的所有命令都应该作为非根用户运行,如果命令需要 root 访问,则将被sudo提前。

系统特定的包与战争文件

现在你知道什么是Jenkins,你需要了解它是如何分布的。Jenkins运行在Java上,并以WAR文件的形式出现 - 一个包含Web应用程序的相关内容的集合,旨在在服务器上运行。

一个Jenkins包适用于Red Hat分布系列,其中包括CentOS操作系统。然而,CentOS 7特别是一个细微的品种,所以它需要不同的方法。在其他基于Red Hat的OS中运行的操作,甚至其他CentOS版本,往往在CentOS 7中工作不同,结果可能导致的潜在错误很难调试。由于Jenkins包是通用的Red Hat,而不是区分为CentOS,运行问题的可能性比在其他OS上更高。

幸运的是,有办法,即使没有包,我们也可以与CentOS合作,让它像服务一样对待Jenkins。

步骤1:安装Jenkins

在 CentOS 上安装 Jenkins 的基本方法有两种:通过存储库或 Repo 和通过 WAR 文件。

您需要 Java 才能运行 Jenkins (任何方法),所以如果您的服务器还没有 Java,请安装它:

1sudo yum -y install java

一般来说,如果您需要一个服务或工具,但您不确定哪个包提供它,您可以通过运行检查:

1yum whatprovides service

服务是您需要的服务或工具的名称。

从 Repo 安装

现在,运行以下操作来从Red Hat Repo下载Jenkins:

1sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

wget工具将文件下载到指定的文件名后O旗(这是一个大小O,而不是一个零)。

然后,使用包管理器 RPM 导入验证密钥:

1sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key

最后,通过运行安装Jenkins:

1sudo yum install jenkins

你现在应该能够启动Jenkins作为服务:

1sudo systemctl start jenkins.service

服务开始后,您可以检查其状态:

1sudo systemctl status jenkins.service

这会给你一个相当长的阅读,有很多关于这个过程是如何开始的和它在做什么的信息,但如果一切顺利,你应该看到两个类似于以下的行:

1Loaded: loaded (/etc/systemd/system/jenkins.service; disabled)
2Active: active (running) since Tue 2015-12-29 00:00:16 EST; 17s ago

这意味着Jenkins服务已经完成了其启动并正在运行,您可以通过访问之前的网页接口来确认这一点,在http://ip-of-your-machine:8080`上。

Welcome to Jenkins! The Jenkins dashboard.

您也可以停止服务:

1sudo systemctl stop jenkins.service

或者重新启动:

1sudo systemctl restart jenkins.service

有关使用 systemctl 管理服务的更多信息,请参阅 How To Use Systemctl to Manage Systemd Services and Units文章。

从战争文件中安装

如果您选择不通过 Repo 安装 Jenkins,您可以使用 WAR 文件实现相同的结果,尽管这需要更多的工作。

让我们先将Jenkins WAR文件下载到服务器,并无缝运行,以确保基本功能正常工作,无需麻烦。

最新的版本的 Jenkins 随时可在 Jenkin’s mirror上使用。 您可以使用任何您想要的工具来下载此文件。 以下方法使用命令行工具称为 wget:

1wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

当你准备好时,请通过Java启动Jenkins:

1java -jar jenkins.war

您应该在控制台中看到输出,表示Jenkins已经开始运行:

1...
2INFO: Jenkins is fully up and running
3...

您现在可以通过浏览器访问界面(http://ip-of-your-machine:8080)。

确认 Jenkins 运行顺利后,结束该过程,以便您可以对其进行更改,以允许其作为服务运行,如下一步所述。

步骤 2 – 运行 Jenkins 作为服务

如果在上一节中,您选择不通过 Repo 安装 Jenkins,而是使用 WAR 文件,您将无法将 Jenkins 作为标准服务使用。

当我们以以下方式配置Jenkins时,它仍然会通过Java运行,但您将能够将其视为服务,启动和停止,并轻松地在背景中运行。

首先,请确保您下载的 WAR 文件位于适合长期存储和使用的位置:

1sudo cp jenkins.war /usr/local/bin/jenkins.war

然后,去你的 /etc/systemd/system/ 目录,并创建一个名为 jenkins.service 的新文件. 下面的演示使用纳米编辑器,但当然你可以使用任何你想要的编辑工具。

1cd /etc/systemd/system/
2sudo nano jenkins.service

现在,将下列行添加到新的 jenkins.service 文件中。

 1[label /usr/local/bin/jenkins.war]
 2[Unit]
 3Description=Jenkins Service
 4After=network.target
 5
 6[Service]
 7Type=simple
 8User=root
 9ExecStart=/usr/bin/java -jar /usr/local/bin/jenkins.war
10Restart=on-abort
11
12[Install]
13WantedBy=multi-user.target

如果你以前看过配置文件(INI 文件或类似),你会识别这里使用的结构. 嵌入式文本表示部分标题. 这意味着,例如,[服务]声明一个名为服务的部分,并且下面的所有分配都包含相关信息,系统将知道如何找到并与部分标题相关。

一个配置文件,包括这个,通常是一个文本文件,这意味着它对计算机没有内在意义,相反,文本文件将被某个过程解析,而这个过程将使用标题和其他信息来找到它的方式。

第一个部分,‘单位’,只包含两个配置指令.第一个只是一个名称. 它可以是任何你想要的名称,但理想情况下,它应该是唯一识别新过程的名称。

在下一节中,Type指令允许您选择该服务将使用的启动类型。Simple值表示后续指令ExecStart中指出的过程将是正在创建的服务的主要过程。

用户指明哪个用户对这个过程有控制权,而重启用来表示,在这种情况下,如果该过程终止,但输出代码意味着错误,服务将重新启动。

正如上面所提到的,ExecStart是指示服务的主要行动过程的指令,该指令代表了Jenkins的主要包装 - 该服务将通过Java运行WAR,而不是将其视为前沿过程。

最后,在安装部分,multi-user.target表示一个目标,称为CentOS 7之前的运行级别,它为系统提供了提供提供该服务的资源和用户所需的强度的感觉。

一旦你的文件被创建和保存,你应该能够启动你的新的Jenkins服务!

当你准备好了,跑:

1sudo systemctl daemon-reload

这适用于您对该单元所做的更改(实际上,它适用于已更改的任何和所有单元)。

您现在应该能够启动 Jenkins 作为服务:

1sudo systemctl start jenkins.service

服务开始后,您可以检查其状态:

1sudo systemctl status jenkins.service

这会给你一个相当长的阅读,有很多关于这个过程是如何开始的和它在做什么的信息,但如果一切顺利,你应该看到两个类似于以下的行:

1Loaded: loaded (/etc/systemd/system/jenkins.service; disabled)
2Active: active (running) since Tue 2015-12-29 00:00:16 EST; 17s ago

这意味着Jenkins服务已经完成了其启动并正在运行,您可以通过访问之前的网页接口来确认这一点,在http://ip-of-your-machine:8080`上。

您也可以停止服务:

1sudo systemctl stop jenkins.service

或者重新启动:

1sudo systemctl restart jenkins.service

有关使用 systemctl 管理服务的更多信息,请参阅 How To Use Systemctl to Manage Systemd Services and Units文章。

步骤三:创建用户

一旦Jenkins运行顺利,建立良好的安全是下一步. 从现在开始,您的确切行动将很大程度上取决于您对Jenkins的目的。

Jenkins 提供安全和角色管理设置,用于控制访问和定义用户操作。我们将访问它以简短地介绍这些概念。 要访问这些设置,您可以通过浏览器返回 Jenkins 界面,一旦您的服务运行(http://ip-of-your-machine:8080)。 您将看到左侧的菜单 – 选择 管理 Jenkins 从里面。 这将带您到包含多个自定义选项的页面。 您还可能会注意到一个警告: **不受保障的 Jenkins 允许网络上的任何人以您的名义启动流程。 至少考虑允许身份验证以阻止滥用。 ** 这是 Jenkins 指令,让你在您的系统中引入一些安全元素。

The "Manage Jenkins" page.

在管理 Jenkins 页面上的链接列表的顶部,首先要进入 ** Configure Global Security **,请检查 ** 启用安全 ** 的选项框,以便为此提供一组选项。

这些选项中最简单的选项,我们今天将介绍的选项,是Jenkins使用自己的数据库来存储用户配置. 在我们标记了检查框时出现的 Access Control部分中,选择 Jenkins自己的用户数据库

您是否应该允许新用户登录取决于您自己的需求。一般来说,限制访问是值得的,并且允许用户随意登录可能允许具有潜在危险的开放程度。 为了限制此情况,请删除标记允许用户登录的选项框。 一旦此设置被关闭,只有管理员才能创建新帐户。

授权下,选择 基于矩阵的安全性选项。这允许对控件进行一些精细调节,而不需要使用复杂的设置。你会看到一个名为 匿名的用户已经存在。匿名用户是任何人,即使他们没有登录,这就是为什么匿名用户默认没有能力。由于这是Jenkins实例的初始设置,你必须给这个用户完整的权限:现在除了匿名之外,没有其他用户,你没有登录,所以关闭匿名权限将有效地阻止你访问Jenkins。

使用匿名字段右侧的小按钮选择所有权限,然后使用用户/组添加输入字段,指定新用户添加权限。

通常情况下,您会首先创建一个新用户,然后在表单的这个部分为其指定权限. 由于尚无用户,您将设置权限,然后创建用户。

输入用户名并按 ** 添加**. 由于 已知的错误,建议您将用户名保留在下方。 为新用户提供所有权限,就像您为匿名用户一样。

完成后,按 ** 应用**,然后按 ** 保存**。

您将自动被带到登录页面,从那里您可以创建新帐户. 您创建的帐户的用户名应与您之前指定权限的用户名相符:

Signing in to your Jenkins instance

当你完成时,你应该发现自己自动登录。

返回安全页面(管理Jenkins -> 配置全球安全),然后向下滚动到安全矩阵. 现在你已经创建了一个管理用户,你可以限制匿名用户的权限。

如果您早些时候关闭了自动登录,则可能需要手动创建额外的新用户。

返回 管理Jenkins页面,向下滚动,靠近底部,然后点击 管理用户。在左侧,你会看到一个带有链接的侧栏;点击 创建用户。输入新用户的信息,就像你创建了第一个用户一样,然后点击 登录。你将被重定向到用户列表,其中现在将包括新用户。这个用户将没有权限,所以你需要重复权限过程,到 配置全球安全,使用 用户/组添加字段添加一个行到矩阵,指定权限,然后点击 应用保存

创建新用户时,请记住,限制性可能是主要的安全资产. 您可以在 ** 使用 Jenkins** 文档中的 Matrix-based Security 部分获取有关基于矩阵的安全性的详细信息。

通常情况下,下一步是将角色分配给您的用户,控制他们的确切能力. 我们不会在本文中深入了解细节,但 这是一篇关于该主题的好文章.在分配角色后,请确保保存您的更改。

步骤 4 – 安装插件

一旦Jenkins安装,配置最小,并合理保障,是时候让它符合您的需求了,正如在首次安装时所发现的那样,Jenkins具有相对较少的能力。事实上,Jenkins给许多软件开发者的信条:做一件事,然后做得很好。

插件是允许Jenkins与各种外部软件进行交互或以其他方式扩展其固有的能力的插件,与许多Jenkins设置领域一样,您安装的确切插件将取决于您的项目。

从Jenkins的主要左侧菜单中,点击 管理Jenkins -> **管理插件。**您登陆的页面显示已安装但需要更新的插件 - 您可以通过选择您想要更新的插件并点击底部的按钮轻松执行。

如果您从此页面点击 Available,您将被带到一个巨大的可用插件列表. 显然,您不希望安装所有可能的插件,所以下一个问题是如何选择您需要的插件。

正如上面提到的,您在这个问题上的选择将取决于您的需求和目标。 幸运的是,Jenkins wiki(https://wiki.jenkins-ci.org/display/JENKINS/Plugins)根据主题提供了一个很好的插件概述。

这个列表绝对值得浏览,但无论你的项目,有几个插件,你几乎肯定应该包括在内。

  1. 源控制

Git、SVN 和 Team Foundation Server 是更常见的源控制系统之一,其中三种都包含在 Jenkins 列表中的插件,其他也存在于较少常见的系统中。如果您不知道源控制是什么,您应该真正了解它(http://guides.beanstalkapp.com/version-control/intro-to-version-control.html),并开始将其纳入您的项目中。

2、 复制文物(

该插件允许您在项目之间复制组件,如果您缺乏真正的依赖管理器,则缓解了建立类似项目的痛苦。

二、竞争对手建设(

如果您运行了多个构建,可能会引入冲突(由于共享资源等),这将使您能够轻松缓解此问题。

依赖图形查看器(Dependency Graph Viewer)

一个巧妙的插件,提供您项目依赖的图形表示。

  1. Jenkins磁盘使用量

Jenkins可能相当轻量级,但对于它集成的项目来说并不总是如此. 这个插件允许您识别您的计算资源中任何一项工作消耗了多少。

创建工具:

如果你的项目大,你可能会使用一个构建管理器,如Maven或Ant. Jenkins为许多这些提供插件,无论是链接到其基本功能,还是为单个构建步骤,投影配置和您的构建的许多其他方面添加控制。

7、报告(

虽然Jenkins提供自己的报告,但您可以将此功能扩展到许多报告工具。

附加身份验证(

如果默认的Jenkins安全功能不适合您,那么有很多插件可以扩展这一点 - 从谷歌登录到活跃目录,到简单的现有安全修改。

一般来说,如果您的项目需要一个特定的工具,请在维基页面上搜索插件列表页面,查找它的名称或有关其功能的关键字 - 很可能有这样的插件存在,这是一个有效的方法来找到它。

一旦您在 ** 可用 ** 卡上选择了您想要安装的插件,请单击标记为 ** 下载现在的按钮,然后重新启动**后安装。

现在,Jenkins已经完成并以您想要的方式运行,您可以开始使用它来支持您的项目集成。Jenkins的功能在其领域内几乎是无限的,但下面的例子应该用来展示Jenkins能够做到的程度和如何开始Jenkins的工作的开始。

步骤五:创建一个简单的项目

您可以从Jenkins中获取很多有趣的用途,甚至与设置一起玩也可以有信息性。 但是,要开始,它有助于了解如何设置一个基本任务。 按照本节中的示例学习如何建立和运行一个简单的工作。

从 Jenkins 界面主页中,选择 新项目. 输入一个名称,然后选择 Freestyle 项目

Creating a new project in Jenkins

下一页是您指定任务配置的页面。正如您很快看到的,当您创建新项目时,有若干设置可用。 通常,更重要的控制之一是连接到源 Repo。

在此配置页面上,您还可以选择添加构建步骤来执行额外的操作,例如运行脚本。

Adding a build step to a project in Jenkins

这将为您提供一个文本框,您可以添加您需要的任何命令。 使用它来执行各种任务,如服务器维护,版本控制,阅读系统设置等。

我们将使用这个部分来运行脚本. 再次,为了演示目的,我们将保持非常简单。

Adding a basic shell command to a project in Jenkins

如果您想要,您也可以添加随后的构建步骤,请记住,如果任何部分或单个脚本失败,整个构建将失败。

您还可以选择运行后构建操作,例如将结果发送给自己。

在这里,您可以看到有关该项目的信息,包括其构建历史,尽管目前不会有任何此类信息,因为这是一个全新的项目。

The Jenkins project overview page

点击左侧的构建现在以启动构建,您会瞬间看到构建历史的更改,以表示它正在工作。

若要查看更多信息,请在构建历史区域点击该构建,然后您将被带到具有构建信息概述的页面:

The Jenkins build results page

本页上的 ** 控制台输出 ** 链接对于详细检查工作结果尤其有用,它提供了在构建过程中所采取的操作的信息,并显示了所有控制台输出。

如果你回到Jenkins的家,你会看到所有项目的概述及其信息,包括状态(在这种情况下,只有一个):

Overview of all projects and their statuses in Jenkins

状态以两种方式显示,天气图标(在主页仪表板上,上面)和彩色球(在单个项目页面上,下面)。

在上面的图像中,你可以看到云,表明一些最近的建造成功了,有些失败了.如果所有建造都成功了,你会看到一个太阳的图像。

这些状态有相应的工具提示,并解释了浮动,并与图表中的其他信息相结合,涵盖了您在概览中所需的大部分内容。

您也可以通过点击此处重建项目(Build Now)。

Jenkins project page with project build statuses

当然,实施全面的项目设置将需要几个步骤和一些细节调整,但很明显,没有太多的努力,您可以为您的项目设置一些非常有用的,非常务实的监视器和控制器。

结论

寻找其他教程,文章和视频非常值得 - 那里有很多信息,并且丰富的信息使得与Jenkins的项目整合实际上是一个风景。

特别是,弥合基础和完全完成的项目之间的差距是改善你的Jenkins技能的好方法,试着按照这些例子(http://www.mberlove.com/blog/learning-jenkins-example-projects/)来促进这一过渡。

此外,许多模板存在于常见的项目类型中,例如 PHP 应用程序Drupal,所以很可能你甚至不需要从头开始设置一切。

Published At
Categories with 技术
comments powered by Disqus