介绍
Jenkins 是一个开源自动化服务器,旨在自动化涉及软件的连续集成和交付的重复性技术任务. 凭借强大的插件生态系统和广泛的支持,Jenkins 可以处理各种工作负载来构建,测试和部署应用程序。
在之前的指南中,我们 安装了Jenkins在Ubuntu 22.04服务器上和 配置了Jenkins使用SSL使用Nginx反向代理程序。
对于本教程,我们将将Jenkins与GitHub集成,以便在新代码被推到存储库时通知Jenkins。当Jenkins被通知时,它将检查代码,然后在Docker容器中测试它,以便从Jenkins主机中隔离测试环境。
前提条件
要跟随这个指南,你需要一个 Ubuntu 22.04 服务器,至少具有 1G 的 RAM 配置与安全的 Jenkins 安装. 要正确地保护 Web 接口,你需要为 Jenkins 服务器分配一个域名。
- 如何在Ubuntu 22.04上安裝Jenkins
- 如何在Ubuntu 22.04上安裝Nginx
- 如何在Ubuntu 22.04上使用Let's Encrypt安全地安裝Nginx
- 如何使用Nginx反向代理使用SSL配置Jenkins
为了更好地控制我们的测试环境,我们将在 Docker 容器中运行我们的应用程序的测试。在 Jenkins 启动并运行后,请按照本指南的第一和第二步在服务器上安装 Docker:
- [如何在Ubuntu 22.04上安装和使用Docker]
当您完成上述指南后,您可以继续这篇文章。
将 Jenkins 用户添加到 Docker 组
在遵循前提条件后,Jenkins 和 Docker 都安装在您的服务器上,但是,默认情况下,负责运行 Jenkins 流程的 Linux 用户无法访问 Docker。
要修复此问题,我们需要使用usermod
命令将jenkins
用户添加到docker
组:
1sudo usermod -aG docker jenkins
您可以列出docker
组的成员,以确认jenkins
用户已被成功添加:
1grep docker /etc/group
1[secondary_label Output]
2docker:x:999:sammy,jenkins
为了让Jenkins使用其新会员资格,您需要重新启动过程:
1sudo systemctl restart jenkins
如果您使用默认插件安装了 Jenkins,您可能需要检查是否已启用了docker
和docker-pipeline
插件。 要做到这一点,请从侧面栏点击 Manage Jenkins,然后从下一个菜单点击 Manage Plugins。 请点击插件菜单的 Available选项卡以搜索新插件,然后在搜索栏中键入docker
。 如果Docker Pipeline
和Docker plugin
都返回为选项,并且未选择,请选择两者,并在提示时允许 Jenkins重新启用新的插件。
这应该需要大约一分钟,然后页面会被刷新。
在 GitHub 中创建个人访问令牌
为了让Jenkins观看你的GitHub项目,你需要在我们的GitHub帐户中创建一个个人访问代币。
首先,请访问 GitHub并登录您的帐户,如果您尚未登录,然后点击右上角的用户图标,并从下拉菜单中选择 设置:
在下面的页面上,查找左侧菜单中的 ** 开发者设置** 部分,然后点击 ** 个人访问代币**:
在下一页上点击生成新代币
按钮:
你将被带到一个页面,在那里你可以定义你的新代币的范围。
在 ** Token 描述 ** 框中,添加一个描述,以便您稍后识别它:
在 Select scope 部分中,请检查 repo:status、 repo:public_repo 和 admin:org_hook 框,这些框将允许 Jenkins 更新 commit 状态并为项目创建 webhooks。
当你完成时,点击 ** 生成代币** 在底部。
您将被重定向到个人访问代币索引页面,您的新代币将显示:
现在复制代币,以便我们可以稍后参考它,正如消息所示,一旦您离开此页面,就没有办法获取代币。
<$>[注意] 注意:正如上面的屏幕截图所提到的,出于安全原因,一旦您离开此页面,就无法重新显示该代币。
现在,您已经为您的 GitHub 帐户设置了个人访问代码,我们可以配置 Jenkins 来监控您的项目存储库。
将 GitHub 个人访问代币添加到 Jenkins
现在我们有一个代币,我们需要将其添加到我们的Jenkins服务器,以便它可以自动设置Webhooks。
点击您的用户名在右上角访问您的用户设置,从那里,点击 Credentials在左侧菜单。
在下一页上,单击 **(全球)**在 Jenkins范围内的箭头,在出现的框中,单击 添加凭证:
您将被带到一个表格来添加新的凭证。
在 Kind下载菜单中,选择 秘密文本。在 秘密字段中,粘贴您的GitHub个人访问代币。填写 ** 描述**字段,以便您能够在以后的日期识别此条目。
点击OK
按钮,当你完成。
您现在将能够从Jenkins的其他部分引用这些凭证来帮助配置。
设置 Jenkins 访问 GitHub
回到主Jenkins仪表板,在左手菜单中点击 Manage Jenkins:
在下一页的链接列表中,单击 配置系统:
浏览下一页的选项,直到您找到 GitHub部分。 点击 添加GitHub服务器按钮,然后选择 GitHub服务器:
在 Credentials下载菜单中,选择您在上一节中添加的GitHub个人访问代币:
点击测试连接
按钮,Jenkins 将对您的帐户进行测试 API 调用并验证连接:
当你完成时,点击保存
按钮来执行你的更改。
在您的 GitHub 帐户中设置示范应用程序
要演示如何使用Jenkins来测试应用程序,我们将使用由Hapi.js(https://hapijs.com/)创建的Hello world
程序(https://github.com/do-community/hello_hapi)。
访问 项目存储库并点击右上角的 Fork按钮,在您的帐户中创建存储库的副本:
存储库的副本将被添加到您的帐户中。
该存储库包含一个package.json
文件,它定义了运行时间和开发依赖,以及如何运行包含的测试套件。
我们还将一个Jenkinsfile
添加到复制片中。Jenkins读取了这个文件,以确定要对存储库执行的操作,以构建、测试或部署。
在hello-hapi
存储库中包含的Jenkinsfile
看起来像这样:
1[label Jenkinsfile]
2#!/usr/bin/env groovy
3
4pipeline {
5
6 agent {
7 docker {
8 image 'node'
9 args '-u root'
10 }
11 }
12
13 stages {
14 stage('Build') {
15 steps {
16 echo 'Building...'
17 sh 'npm install'
18 }
19 }
20 stage('Test') {
21 steps {
22 echo 'Testing...'
23 sh 'npm test'
24 }
25 }
26 }
27}
管道
包含了Jenkins将评估的整个定义。内部,我们有一个代理
部分,指明管道中的行动将在哪里执行。
由于 Hapi.js 是 Node.js 的框架,我们将使用节点
Docker 图像作为我们的基础,我们在容器中指定根
用户,以便用户可以同时写到包含已检查的代码的附加卷,以及脚本编写其输出的卷。
接下来,该文件定义了两个阶段,即工作的逻辑划分。我们命名了第一个阶段为构建
和第二阶段为测试
。构建步骤打印了一个诊断消息,然后运行npm install
以获得所需的依赖性。
现在你有一个具有有效的Jenkinsfile
的存储库,我们可以设置Jenkins来查看该存储库,并在进行更改时运行该文件。
创建一个新的管道在Jenkins
接下来,我们可以设置Jenkins以使用GitHub个人访问令牌来监控我们的存储库。
回到主Jenkins仪表板,在左手菜单中点击 新项目:
在输入项目名称
字段中输入新管道的名称,然后选择管道
作为项目类型:
点击底部的OK
按钮继续前进。
在下一个屏幕上,请检查 GitHub 项目 框. 在出现的 Project url 字段中,输入您的项目的 GitHub 库 URL。
<$>[注意] 注意:请确保指向您的Hello Hapi应用程序的叉子,以便Jenkins可以配置网页夹。
接下来,在Build Triggers 部分中,检查 GITScm 调查的 ** GitHub 链接触发器 ** 框:
在管道
部分中,我们需要告诉Jenkins在我们的存储库中运行Jenkinsfile
中定义的管道。
在出现的新部分中,请在 SCM菜单中选择 Git. 在出现的 Repository URL字段中,再次输入您的仓库叉的URL:
<$>[注] 注:再次,请确保指向您的Hello Hapi应用程序的叉子。
<$>[注]
注:我们的示例引用了在公共存储库中可用的Jenkinsfile
。如果您的项目无法公开访问,则需要使用 add credentials按钮来添加额外的存储库访问权限。
当你完成时,点击页面底部的保存
按钮。
执行初始构建和配置 Webhooks
Jenkins 在界面中定义存储库的管道时不会自动配置 webhooks. 为了触发 Jenkins 设置相应的hooks,我们需要首次执行手动构建。
在你的管道的主页上,在左手菜单中点击 Build Now:
在左下角的构建历史
框中,新构建应该在一瞬间出现,此外,在接口的主要区域将开始绘制一个阶段视图
。
在构建历史
框中,点击与构建相关的号码,前往构建详细信息页面,从这里,您可以在左侧菜单中点击Console Output
按钮,以查看所执行的步骤的详细信息:
当您完成时,请单击左侧菜单中的 ** 返回项目 ** 项,以返回主管视图。
现在我们已经构建了该项目一次,我们可以让Jenkins为我们的项目创建Webhooks。
在此屏幕上不需要任何更改,只需点击底部的保存
按钮.现在Jenkins从最初的构建过程中有有关该项目的信息,当您保存页面时,它将与我们的GitHub项目注册Webhook。
您可以通过访问您的 GitHub 存储库来验证这一点,然后点击设置
按钮。下一页,从侧面菜单中点击Webhooks
。
如果由于任何原因,Jenkins 未能注册链接(例如,由于 Jenkins 和 Github 之间的上游 API 变化或中断),您可以通过单击 ** Add webhook** 并确保 Payload URL 设置为 https://my-jenkins-server:8080/github-webhook
,并将 Content type 设置为 application/json
,然后在提示的底部再次单击 ** Add webhook**。
现在,当您将新的更改推向您的存储库时,Jenkins将被通知,然后将引导新代码并使用相同的程序重新测试。
要接近这一点,在GitHub上的库页面中,您可以点击绿色 克隆或下载按钮左侧的 创建新文件按钮:
在下一页中,选择一个文件名和一些愚蠢的内容:
在您完成后,点击底部的 ** 承诺新文件** 按钮。
如果你回到你的Jenkins界面,你会看到一个新的构建自动启动:
您可以通过向存储库的本地副本做出承诺并将其推回GitHub来启动额外的构建。
结论
在本指南中,我们将Jenkins配置为观看GitHub项目,并自动测试任何新的更改。Jenkins从存储库中提取代码,然后从单独的Docker容器中运行构建和测试程序。
有关 GitHub 操作的更多信息,请参阅 GitHub 的文档。