如何设置Jenkins在CentOS 7连续开发集成

合并代码。协调版本。确定建设情况。维护更新。如果你知道这些过程不够好,文字本身威胁头疼的挫折,你可能想看看JenkinsCI。在其核心,Jenkins做两件事:自动化的整合和外部构建监控。这意味着它可以极大地简化保持你的代码维护的过程,并密切和不懈的关注你的构建质量。

介绍

合并代码。 协调版本。 确定构建状态。 维护更新。 如果你知道这些过程的挫折,以至于这些词本身威胁到头痛,你可能想要查看Jenkins CI。

维护任何项目,特别是由几个团队成员同时开发的项目,以及可能包含许多功能,组件,语言和环境的项目,是在最好的时代的斗争 - 而最糟糕的是需要一个超人的壮举。

Jenkins在这里帮助。 从根本上讲,是持续集成的解决方案 - 即将所有代码不断地合并为一个中心构建的实践 - Jenkins充当您项目运营的总部。 它可以监控,调节,比较,合并和维护您的项目的所有方面。

Jenkins的核心是做两件事:自动化集成和外部构建监视。 这意味着它可以极大地简化保持代码可维护性的过程,并且保持对构建质量的密切和无拘束的关注,确保当一些开发者在准备好代码之前合并时,不会出现令人讨厌的惊喜。

让我们深入了解一下Jitkins的外观和使用方法。

先决条件

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

本教程中的所有命令都应以非root用户身份运行。 如果需要该命令的root访问权限,它会在前面加sudo

系统特定包与WAR文件

现在你知道Jenkins是什么,你需要了解它是如何分布的。 Jenkins运行在Java上,并作为一个WAR文件 - 一个相关内容的集合包括一个Web应用程序,并打算在服务器上运行。 然而,Jenkins的开发人员通过许多特定于系统的软件包扩展了其易用性,允许Jenkins作为受控服务运行。

Jenkins软件包可用于Red Hat系列发行版,其中包括CentOS操作系统。 然而,CentOS 7特别是一个精细的品种,所以它需要一个不同的方法。 在其他基于Red Hat的操作系统中工作的操作(甚至是其他CentOS版本)在CentOS 7中的工作方式不同,导致的潜在错误很难调试。 由于Jenkins包是通用的Red Hat,而不是针对CentOS进行区分,所以遇到问题的可能性要高于其他操作系统。 因此,我们不会通过这个包运行Jenkins。 这让我们的WAR文件运行通过Java,这是远不太方便,需要我们手动启动和停止它通过Java。

幸运的是,有一个方法,即使没有一个包,我们可以与CentOS一起工作,让它像Jenkins一样服务。

第1步 - 安装Jenkins

有两种基本方法在CentOS上安装Jenkins:通过存储库或repo,以及通过WAR文件。 从repo安装是首选方法,这是我们将首先概述。

你需要Java运行Jenkins(任一方法),所以如果你的服务器还没有Java,安装它:

sudo yum -y install java

一般来说,如果你需要一个服务或工具,但你不知道什么包提供它,你可以总是通过运行检查:

yum whatprovides service

其中, service是您需要的服务或工具的名称。

从Repo安装

现在,运行以下命令从Red Hat仓库下载Jenkins:

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

wget工具下载文件到“O”标志之后指定的文件名(这是一个资本'O',而不是一个零)。

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

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

最后,通过运行以下命令来安装Jenkins:

sudo yum install jenkins

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

sudo systemctl start jenkins.service

服务启动后,您可以检查其状态:

sudo systemctl status jenkins.service

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

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

这意味着Jenkins服务完成了启动并且正在运行。 您可以像以前那样访问Web界面,在确认这一点http:// ip-of-your-machine :8080

欢迎来到Jenkins! Jenkins仪表板。

同样,您可以停止服务:

sudo systemctl stop jenkins.service

或重新启动:

sudo systemctl restart jenkins.service

与systemctl管理服务的更多信息,可以在找到如何使用Systemctl来管理Systemd服务和单位文章。

从WAR文件安装

如果你选择不通过repo安装Jenkins,无论什么原因,你可以使用WAR文件完成相同的结果,虽然这需要一些更多的工作。

让我们首先将Jenkins WAR文件下载到服务器,并运行它没有褶边,以确保基本功能正常工作没有麻烦。

Jenkins在任何特定时间的最新版本可在詹的镜子 您可以使用任何工具,你喜欢下载这个文件。 下面的方法采用所谓的命令行工具wget

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

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

java -jar jenkins.war

你应该看到控制台中的输出指示Jenkins已经开始运行:

...
INFO: Jenkins is fully up and running
...

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

在确认Jenkins成功运行后,结束进程,以便您可以对其进行更改,以允许它作为服务运行,如下一步中讨论的。 要结束正在运行的前台进程,按CTRL-C

第2步 - 运行Jenkins作为服务

如果在上一节中,您选择不通过repo安装Jenkins,而是使用WAR文件,您将无法像标准服务一样使用Jenkins。 如果您使用repo,请跳过此步骤。

当我们配置Jenkins的方式如下,它仍然会通过Java运行,但你可以像一个服务,开始和停止它,并让它在后台运行轻松地对待它。 该服务本质上将作为包装器工作。

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

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

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

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

现在,以下行添加到新jenkins.service文件。 稍后,我们将准确地了解这些线完成了什么。

/usr/local/bin/jenkins.war
[Unit]
Description=Jenkins Service
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/java -jar /usr/local/bin/jenkins.war
Restart=on-abort

[Install]
WantedBy=multi-user.target

如果您之前已经看过配置文件(INI文件或类似文件),您将会识别此处使用的结构。 括号中的文本表示节标题。 这意味着,例如, [Service]声明一段名为“服务”,并在它下面的所有分配包含相关信息,系统便会知道如何找到并涉及到节头。

配置文件(包括这一个)通常是一个文本文件 - 这意味着它对计算机没有内在意义。 相反,文本文件将由一些进程解析,并且该进程将使用标题和其他信息来找到它的方式。 因为这个原因,它在技术上是不相关的给定的配置文件如何布局 - 只要程序读取它可以理解一切意味着什么。

首节, Unit ,只包含两个配置指令。 第一个简单的名字。 它可以是任何你想要的名称,但理想情况下,它应该是一个唯一标识新过程。 第二个指令说明了当前服务启动所需的服务(如果有的话)。

在下一节中, Type指令允许你选择此服务将使用什么类型的启动。 simple指示该过程中的后面指令指出ExecStart将正在创建的服务的主要过程。 真的, type是不必要的,因为simple假设时,类型是不确定的,但我们在离开它的清晰度。

User指定哪些用户拥有该过程的控制,并且Restart用于指示,在这种情况下,如果该过程终止,但退出代码意味着错误,则服务将被重新启动。 这有助于在意外崩溃的情况下维持服务的连续性。

正如前面提到的, ExecStart是我们指明哪些进程是成为服务的主要动作的指令。 这个指令表示Jenkins的主要包装 - 服务将通过Java运行WAR,而不是将其视为一个前台进程。

最后,在Install部分中, multi-user.target表示一个目标,称为运行级别之前的CentOS 7.它为系统的哪些资源来提供这种服务,什么强度的量将被用户需要感。

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

准备好后,运行:

sudo systemctl daemon-reload

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

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

sudo systemctl start jenkins.service

服务启动后,您可以检查其状态:

sudo systemctl status jenkins.service

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

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

这意味着Jenkins服务完成了启动并且正在运行。 您可以像以前那样访问Web界面,在确认这一点http:// ip-of-your-machine :8080

同样,您可以停止服务:

sudo systemctl stop jenkins.service

或重新启动:

sudo systemctl restart jenkins.service

与systemctl管理服务的更多信息,可以在找到如何使用Systemctl来管理Systemd服务和单位文章。

第3步 - 创建用户

一旦Jenkins运行顺利,建立良好的安全性是下一步。 从这里开始,你的具体行动将在很大程度上取决于你的目的Jenkins。 但是,以下是如何最好地设置和使用Jenkins的一般准则,以及一些铺平道路的示例。

Jenkins提供了安全和角色管理设置,用于控制访问和定义用户操作。 我们将简要介绍这些概念。 要获取这些设置,通过浏览器返回Jenkins接口,一旦您的服务正在运行( http:// ip-of-your-machine :8080 )。 你会看到在左边的菜单-选择从内管理Jenkins 这将带您到包含多个自定义选项的页面。 您可能还注意到一个在顶部的警报: 无担保Jenkins允许网络上的任何人以您的名义发动的过程。 至少考虑启用身份验证以阻止滥用。这是Jenkins的指令,让你带来安全的一些元素,您的系统。

“管理Jenkins”页面。

在这里采取的第一步就是去配置全球安全的管理Jenkins网页上的链接列表的顶部附近。 检查启用安全性带来了一组选项用于此目的的选项框。 有多种方式对Jenkins配置安全性-你可以阅读的深入解释标准安全设置 使用Jenkins文档的部分。

这些选项中最直接的选择,以及我们今天将要讨论的选项,Jenkins使用自己的数据库来存储用户配置。 根据访问控制部分这似乎当我们标记的复选框,选择Jenkins自己的用户数据库 简而言之,其他选项是将Jenkins链接到现有的Unix用户和组,以使用组织范围的登录(LDAP选项),或允许Java servlet管理访问。 其他选项可以通过插件添加(我们将讨论插件有点)。

是否允许新用户注册很大程度上取决于您自己的需要。 然而,一般来说,它限制访问,并允许用户按照自己的意愿注册可以允许一个可能是危险的开放水平。 要限制这一点,取消勾选允许用户注册的复选框。 关闭此设置后,只有管理员可以创建新帐户。 稍后,您将为要创建的用户提供管理权限,我们还将详细介绍添加新用户。

根据授权 ,选择基于矩阵的安全选项。 这允许对控制进行一些微调,而不诉诸复杂的设置。 你会看到一个名为匿名用户已经存在。 匿名用户是任何人从任何地方,即使他们没有登录,这就是为什么默认情况下,匿名用户没有能力。 由于这是Jenkins实例的初始设置,您必须为此用户授予完全权限:现在没有匿名用户,并且您没有登录,因此关闭匿名权限将有效地阻止您访问Jenkins在所有。

使用小按钮匿名行右侧选择所有权限。 接下来,使用用户/组添加输入字段中指定要添加权限的新用户。 请注意,这不会实际创建用户,而是为不久将创建的用户指定权限。

通常,您将首先创建一个新用户,然后在表单的这个部分为它们指定权限。 由于还没有用户存在,您将设置权限,然后创建用户。

输入用户名,然后按添加 由于一个已知的bug ,建议您保留用户名小写。 为新用户授予与匿名用户相同的所有权限。 这基本上设置了一个新的管理员。

当你完成后,按应用 ,然后保存

系统会自动将您转到注册页面,您可以在其中创建新帐户。 您创建的帐户的用户名应该对应于您之前指定权限的帐户:

登录到您的Jenkins实例

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

返回到安全网页( Jenkins管理 - > 配置全球安全 )和向下滚动到安全矩阵。 现在您已创建管理用户,您可以限制匿名用户的权限。 取消匿名行中的所有权限,然后单击应用保存 您的新用户现在将是唯一可以访问Jenkins的用户。

如果您先前关闭了自动注册功能,则可能需要手动创建其他新用户。 方法如下:

返回到管理页面Jenkins ,向下滚动到接近底部,然后单击管理用户 在左边你会看到一个带有链接的边栏; 点击创建用户 输入信息,新用户相同的方式,您创建的第一个用户,然后点击注册 系统会将您重定向到用户列表,现在该用户将包含新用户。 该用户将没有权限,所以你需要重复的权限过程中,将配置全球安全 ,使用用户/组添加字段添加一行到矩阵,指定权限,单击应用保存 为了简单起见,如果您有多个用户要创建,请先创建它们,然后再继续添加权限。

在创建新用户时,请记住,限制性可以是主要的安全资产。 您可以了解更多有关在特定的插件和基于矩阵的安全出局基于矩阵的安全 使用Jenkins文档的部分。

通常,下一步是为用户分配角色,控制他们的确切能力。 我们将不赘述在这篇文章中,但是这是关于这个问题的好文章 确保在分配角色后保存更改。

第4步 - 安装插件

一旦Jenkins安装,最低配置和合理的安全,是时候使它适合你的需要。 正如第一次安装时所发现的,Jenkins的能力相对较少。 事实上,Jenkins代表了许多软件开发人员的信条:做一件事,做得很好。 Jenkins“做一件事”作为一个中间人为您的软件项目和“做得很好”通过提供插件。

插件是附加组件,允许Jenkins与各种外部软件进行交互,或者扩展其内在的能力。 与许多地区的Jenkins设置,安装的确切的插件将显着依赖于您的项目。

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

如果从这个页面上提供点击,你将采取可用的插件的一个巨大的列表。 显然,你不想安装所有可能的插件,所以下一个问题是如何选择你需要的。

如上所述,您在这件事上的选择将取决于您的需求和目标。 幸运的是, Jenkins维基提供了按主题插件的一个很好的破败。

这个列表绝对值得一读,但无论你的项目,有几个插件,你几乎肯定应该包括。 这里有几个 - 一些通用,一些具体:

  1. 源控制
    Git,SVN和Team Foundation Server是一些更常见的源代码控制系统。 所有这三个都在Jenkins列表中有插件,其他的也存在不太常见的系统。 如果你不知道什么是源头控制,你应该了解它 ,并开始将其纳入在您的项目。 确保为源代码控制系统安装插件,所以Jenkins可以通过它运行构建并控制测试。

  2. 复制神器
    这个插件允许你在项目之间复制组件,如果你缺乏一个真正的依赖项管理器,减轻了设置类似项目的痛苦。

  3. 节流同时生成
    如果您有多个构建运行可能会引入冲突(由于共享资源等),这将轻松允许您减轻这种担心。

  4. 依赖关系图查看器
    一个漂亮的插件,提供了你的项目依赖的图形表示。

  5. Jenkins磁盘使用率
    Jenkins可能相当轻量级,但是对于它集成的项目来说并不总是这样。 此插件允许您确定您的任何作业消耗了多少计算资源。

  6. 构建工具
    如果你的项目很大,你可能使用一个构建管理器,如Maven或Ant。 Jenkins为其中许多提供了插件,既可以链接其基本功能,也可以添加对各个构建步骤,投影配置以及构建的许多其他方面的控制。

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

  8. 附加验证
    如果默认的Jenkins安全功能不适合你,有很多插件来扩展它 - 从Google登录,到活动目录,到现有安全性的简单修改。

一般来说,如果你的项目需要一个特定的工具,搜索插件列表页面上的wiki它的名称或关于它的功能 - 有机会是这样的插件存在,这是一个有效的方式来找到它。

一旦你选择你要安装的可用选项卡上的这些插件,点击按钮标记立即下载并重新启动后安装

现在,Jenkins正在运行你想要的方式,你可以开始使用它来为您的项目集成。 Jenkins的能力在其领域内几乎是无穷无尽的,但是下面的例子应该证明Jenkins可以做什么以及如何开始Jenkins工作的开始。

第5步 - 创建一个简单的项目

有很多有趣的用途,你可以离开Jenkins,甚至玩弄设置可以提供信息。 但是,为了开始,它有助于了解如何设置基本任务。 按照本节中的示例了解如何建立和运行直接作业。

从Jenkins接口的家,选择新建项目 输入一个名称,然后选择项目的自由泳

在Jenkins中创建一个新项目

此下一页是您指定作业配置的位置。 你会很快观察到,当你创建一个新的项目时,有一些设置可用。 通常,更重要的控件之一是连接到源代码库。 为了介绍这个例子,我们跳过这一步。

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

在Jenkins的项目中添加一个构建步骤

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

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

在Jenkins的项目中添加一个基本的shell命令

如果需要,您还可以添加后续构建步骤。 请记住,如果任何段或单个脚本失败,整个构建将失败。

您还可以选择要运行的生成后操作,例如将结果通过电子邮件发送给自己。

保存项目,您将转到其项目概述页面。 在这里,您可以看到有关项目的信息,包括其建成的历史,虽然目前不会有任何的,因为这是一个全新的项目。

Jenkins项目概述页面

单击立即建立在左手边,开始构建。 您将立即看到构建历史记录更改,以指示它正在工作。 完成后,状态图标将再次更改,以简洁的形式显示结果。

要查看更多信息,请在构建历史记录区域中点击该构建,然后您将转到包含构建信息概述的页面:

Jenkins构建结果页面

此页面上的控制台输出链接是详细研究工作的结果特别有用-它提供了有关构建过程中所采取的行动信息,并显示所有的控制台输出。 特别是在失败的构建之后,这可以是一个有用的地方看。

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

Jenkins中所有项目及其状态的概述

状态以两种方式指示,通过天气图标(在主页仪表板上,如上所示)和彩色球(在单个项目页面上,如下所示)。 天气图标特别有用,因为它显示了一个图像中多个建筑的记录。

在上图中,您看到云,表示一些最近的构建成功,一些失败。 如果他们都成功了,你会看到一个太阳的形象。 如果所有建筑最近失败,将有一个恶劣的天气图标。

这些状态具有相应的工具提示,并对悬停进行了说明,并结合图表中的其他信息,涵盖了概述中所需的大部分内容。

您也可以从这里通过点击( 现在建 )重建项目。

Jenkins项目页面,其中包含项目构建状态

当然,实施全面的项目设置将涉及几个步骤和一些微调,但很显然,没有太多的努力,你可以为您的项目设置一些非常有用,非常务实的监视器和控件。 探索Jenkins,你会很快发现它是一个无价的工具。

结论

非常值得寻找其他教程,文章和视频 - 有很多东西,丰富的信息使得与Jenkins的项目集成变得轻而易举。 由Jenkins主持团队的教程都值得一试。

特别是,弥合基础和完全成熟的项目之间的差距是一个伟大的方式来提高你的Jenkins的技能。 尝试下面这些例子 ,以此来减轻这种过渡。

此外,对于常见类型的项目,如存在许多模板PHP应用程序Drupal的 ,所以机会是强大的,你甚至不会需要建立一切从头开始。 所以去那里,学习所有你敢对Jenkins,让你的生活更容易!