如何在CentOS 7上设置Jenkins以进行持续开发集成

介绍

合并代码、协调发布、确定构建状态、维护更新。如果你足够了解这些过程的挫败感,这些话本身就会让人头疼,你可能想看看Jenkins CI。

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

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

Jenkins的核心是两件事:自动集成和外部构建监控。这意味着它可以大大简化保持代码可维护性的过程,并对构建的质量保持密切和不懈的关注,确保当您的一些开发人员在准备好之前合并代码时,不会产生令人讨厌的意外。

让我们深入了解细节,准确了解Jenkins的样子以及如何使用它。

准备

要学习本教程,您需要具备以下条件:

  • CentOS 7 腾讯云CVM,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 具有sudo权限的非root用户。

本教程中的所有命令都应以非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。这使得我们通过Java运行WAR文件,这不太方便,需要我们通过Java手动启动和停止它。

幸运的是,有一种解决方法,即使没有包,我们也可以使用CentOS让Jenkins像服务一样对待它。

第1步 - 安装Jenkins

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

您需要Java来运行Jenkins(任一方法),因此如果您的服务器还没有Java,请安装它:

sudo yum -y install java

通常,如果您需要服务或工具,但不确定提供的是哪个包,则可以通过运行来检查:

yum whatprovides service

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

从回购安装

现在,运行以下命令从Red Hat repo下载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服务已完成启动并正在运行。您可以像以前一样在http://ip-of-your-machine:8080上访问Web界面来确认这一点。

同样,您可以停止服务:

sudo systemctl stop jenkins.service

或重新启动它:

sudo systemctl restart jenkins.service

从WAR文件安装

如果您因任何原因选择不通过repo安装Jenkins,则可以使用WAR文件完成相同的结果,但这需要更多的工作。

让我们首先将Jenkins WAR文件下载到服务器并运行它,没有多余的装饰,以确保基本工作正常,没有麻烦。

Jenkin's mirror上可以找到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文件中。在一瞬间,我们将完全了解这些线路的成就。

[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]声明一个名为“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服务已完成启动并正在运行。您可以像以前一样在http://ip-of-your-machine:8080上访问Web界面来确认这一点。

同样,您可以停止服务:

sudo systemctl stop jenkins.service

或重新启动它:

sudo systemctl restart jenkins.service

第3步 - 创建用户

一旦Jenkins顺利运行,下一步就是建立良好的安全性。从现在开始,你的确切行动将在很大程度上取决于你对Jenkins的目的。但是,以下是关于如何最好地设置和使用Jenkins的一般指导原则,以及一些例子来铺平道路。

Jenkins提供安全性和角色管理设置,对于控制访问和定义用户操作非常有用。我们将简要介绍一下这些概念。要进入这些设置,请在(http://ip-of-your-machine:8080)服务运行后通过浏览器返回Jenkins界面。您将在左侧看到一个菜单 - 从中选择Manage Jenkins。这将带您进入包含许多自定义选项的页面。您可能还会注意到顶部的警报:不安全的Jenkins允许网络上的任何人代表您启动进程。**考虑至少启用身份验证以阻止滥用。**这是Jenkins的指令,旨在让您向系统介绍一些安全元素。

这里采取的第一步是转到配置全局安全,位于管理Jenkins页面上链接列表的顶部。选中“ 启用安全性 ”选项框以显示一组用于此目的的选项。有许多方法可以在Jenkins上配置安全性 , 您可以阅读Use Jenkins文档的Standard Security Setup部分中的深入说明。

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

是否允许新用户注册主要取决于您自己的需求。但是,一般情况下,限制访问权限并允许用户按照自己的意愿注册可能会产生可能存在危险的开放程度。要对此进行限制,请取消选中标记为允许用户注册的复选框。关闭此设置后,只有管理员才能创建新帐户。稍后,您将为您将要创建的用户提供管理权限,我们还将详细介绍如何添加新用户。

在“ 授权”下,选择基于Matrix的安全性选项。这允许对控件进行一些微调,而无需采用复杂的设置。您将看到名为Anonymous的用户已存在。匿名用户是来自任何地方的任何人,即使他们没有登录,这就是为什么默认情况下匿名用户没有能力。由于这是Jenkins实例的初始设置,因此您必须为此用户授予完全权限:现在没有匿名用户,并且您尚未登录,因此关闭匿名权限将有效地阻止您访问Jenkins一点都不

使用Anonymous行右侧的小按钮选择所有权限。接下来,使用“ 用户/”组添加输入字段以指定要为其添加权限的新用户。请注意,这实际上并不是创建用户,而是为您即将创建的用户指定权限。

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

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

完成后,按“ 应用”,然后按“ 保存”

您将自动进入注册页面,您可以从中创建新帐户。您创建的帐户的用户名应与您之前指定权限的用户名相对应:

完成后,您会发现自己已经自动登录。

返回安全页面(Manage Jenkins - > Configure Global Security)并向下滚动到安全矩阵。现在您已经创建了管理用户,您可以限制匿名用户的权限。取消选择匿名行中的所有权限,然后单击“ 应用保存”。您的新用户现在将是唯一可以访问Jenkins的用户。

如果您之前关闭了自动注册,则可能需要手动创建其他新用户。这是如何做:

返回Manage Jenkins页面,向下滚动到底部附近,然后单击Manage Users。在左侧,您会看到一个带有链接的侧边栏; 单击“ 创建用户”。以与创建第一个用户相同的方式输入新用户的信息,然后单击“ 注册”。您将被重定向到用户列表,现在将包括新用户。此用户没有权限,因此您需要重复权限过程,转到配置全局安全性,使用用户/组添加字段向矩阵添加行,指定权限,然后单击应用保存。为简单起见,如果您要创建多个用户,请在继续添加权限之前创建所有用户。

在创建新用户时,请记住限制性可能是主要的安全资产。您可以在Use Jenkins文档的基于Matrix的安全性部分中了解有关基于矩阵的安全性的具体细节。

通常,下一步是为用户分配角色,控制他们的确切能力。分配角色后,请务必保存更改。

第4步 - 安装插件

一旦安装了Jenkins,配置最少且合理安全,就可以根据自己的需要进行调整。在首次安装时发现,Jenkins的能力相对较低。实际上,Jenkins代表了许多软件开发人员的信条:做一件事,做得好。Jenkins通过为您的软件项目充当中间人“做一件事”并通过提供插件“做得好”。

插件是附加组件,允许Jenkins与各种外部软件交互或以其他方式扩展其固有的能力。与Jenkins设置的许多区域一样,您安装的确切插件将显着依赖于您的项目。

在Jenkins的左侧主菜单中,单击Manage Jenkins - > Manage Plugins。您登陆的页面显示已安装但需要更新的插件 - 您可以通过选择要更新的插件并单击底部的按钮轻松执行此操作。

如果单击此页面上的“ 可用”,您将进入可用插件的巨大列表。显然,您不想安装所有可能的插件,因此下一个问题是如何选择您需要的插件。

如上所述,您在此问题上的选择将取决于您的需求和目标。幸运的是,Jenkins wiki按主题提供了很好的插件。

这个列表绝对值得一试,但无论你的项目是什么,你都应该包含几个插件。以下是一些 - 一些通用的,一些具体的:

  1. 源代码控制 Git,SVN和Team Foundation Server是一些比较常见的源代码控制系统。所有这三个插件都在Jenkins列表中,而其他插件也存在于不太常见的系统中。如果您不知道源代码控制是什么,您应该真正了解它并开始将其合并到您的项目中。确保为源代码控制系统安装插件,因此Jenkins可以通过它运行构建并控制测试。
  2. 复制工件 此插件允许您在项目之间复制组件,如果您缺少真正的依赖关系管理器,则可以减轻设置类似项目的痛苦。
  3. 限制并发构建 如果运行多个构建可能会引发冲突(由于共享资源等),这将很容易让您缓解这种担忧。
  4. 依赖关系图查看器 一个漂亮的插件,提供项目依赖关系的图形表示。
  5. Jenkins磁盘使用 Jenkins可能相当轻量级,但对于与其集成的项目,并不总是如此。通过此插件,您可以确定任何作业消耗的计算资源量。
  6. 构建工具 如果项目很大,则可能使用构建管理器,例如Maven或Ant。Jenkins为其中许多提供了插件,既可以链接其基本功能,也可以为各个构建步骤,投影配置以及构建的许多其他方面添加控件。
  7. 报告 虽然Jenkins提供了自己的报告,但您可以将此功能扩展到许多报告工具。
  8. 附加身份验证 如果安全性的默认Jenkins功能不适合您,那么有很多插件可以扩展它 - 从Google登录到活动目录,再到现有安全性的简单修改。

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

选择要在“ 可用”选项卡上安装的插件后,单击标记为立即下载的按钮,然后在重新启动后安装

既然Jenkins已经按照您想要的方式运行,您就可以开始使用它来为您的项目集成提供支持。Jenkins的功能在其领域内几乎是无穷无尽的,但以下示例应该用于展示Jenkins可以做的范围以及如何开始Jenkins工作的开始。

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

您可以从Jenkins中获得许多有趣的用途,甚至可以使用这些设置来提供信息。但是,要开始,了解如何设置基本任务会有所帮助。按照本节中的示例了解如何建立和运行简单的作业。

从Jenkins界面主页,选择New Item。输入名称并选择Freestyle项目

您可以在下一页指定作业配置。正如您将要快速观察到的,创建新项目时可以使用许多设置。通常,一个更重要的控件是连接到源代码库。出于本介绍性示例的目的,我们将跳过该步骤。

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

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

我们将使用此部分来运行脚本。同样,出于演示目的,我们将保持非常简单。

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

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

保存项目,您将进入项目概述页面。在这里,您可以看到有关该项目的信息,包括其建立的历史记录,但由于这是一个全新的项目,目前不会有任何此类信息。

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

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

此页面上的“ 控制台输出”链接对于详细检查作业结果特别有用 - 它提供有关在构建期间执行的操作的信息并显示所有控制台输出。特别是在构建失败之后,这可能是一个有用的地方。

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

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

在上图中,您看到云,表示某些最近的构建成功,有些失败。如果所有这些都成功了,你会看到太阳的图像。如果所有版本最近都失败了,那么天气图标会很糟糕。

这些状态具有相应的工具提示,其中包含有关悬停的说明,并且与图表中的其他信息相结合,涵盖了概览中所需的大部分内容。

您也可以通过单击(立即生成)从此处重建项目。

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

结论

寻找其他教程,文章和视频是非常值得的 - 那里有很多,而且丰富的信息使得与Jenkins建立项目集成几乎是轻而易举的。Jenkins团队主持的教程值得一看。

特别是,缩小基础知识与完全成熟项目之间的差距是提高Jenkins技能的好方法。尝试按照这些示例来缓解这种转变。

此外,对于常见的项目类型,例如PHP应用程序Drupal,存在许多模板,因此很有可能您甚至不需要从头开始设置所有内容。所以去那里,了解你对Jenkins的所有胆量,让你的生活更轻松!

想要了解更多关于配置设置Jenkins以进行持续开发集成的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Set Up Jenkins for Continuous Development Integration on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

intellij idea 高级用法之:集成JIRA、UML类图插件、集成SSH、集成FTP、Database管理

之前写过一篇IntelliJ IDEA 13试用手记 ,idea还有很多高大上的功能,易用性几乎能与vs.net媲美,反正我自从改用idea后,再也没开过ecl...

4195
来自专栏纯洁的微笑

Eureka 虽然闭源了,但注册中心还有更多选择:Consul 使用详解

在上个月我们知道 Eureka 2.0 闭源了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面

6653
来自专栏大魏分享(微信公众号:david-share)

从开发角度看四类企业应用架构1: 通过Maven编译并运行一个Java应用

1152
来自专栏zhisheng

日志工具现状调研

  针对这类问题,对当前java比较流行的一些日志工具进行了调研,以期能够在未来的开发使用中做到全组代码风格统一,日志写得好对于我们开发调试,线上问题追踪等都有...

1772
来自专栏刘望舒

这一次彻底弄明白Gradle相关配置

9282
来自专栏Java学习之路

01 Spring框架 基本介绍

相信学习java,并且走Web道路的道友都应该知道Spring的大名,它的地位相信也不需要我在这里多说什么,接下来的文章就Spring的配置和使用来进行一些讲解...

3397
来自专栏刘君君

Rest Notes-REST架构的视图

1674
来自专栏杨建荣的学习笔记

有趣的linux命令总结(78天)

linux命令可以简化我们工作中的许多任务。关于Linux这个主题已经考虑很久了,也还是在不断的完善中,在自己的实验和各种资料的整理中,认为还是一些不错的命令。...

2885
来自专栏有趣的Python

用TravisCI持续集成自动部署Hexo博客的个人实践What is Travis CI?Why we need Travis CI?How to use Travis CI to deploy h

优秀的程序员都是不用持续集成的 前几天我面试了一个码农,连续几个专业问题他都没答上来。 尴尬之余,我问它:「你没有什么理想吗?你现在最渴望的事情是什么?」 ...

3876
来自专栏杨建荣的学习笔记

有趣的linux命令总结(78天)

linux命令可以简化我们工作中的许多任务。关于Linux这个主题已经考虑很久了,也还是在不断的完善中,在自己的实验和各种资料的整理中,认为还是一些不错的命令。...

37212

扫码关注云+社区

领取腾讯云代金券