如何在 Ubuntu 22.04 上的 Jenkins 中设置持续集成管道

介绍

Jenkins 是一个开源自动化服务器,旨在自动化涉及软件的连续集成和交付的重复性技术任务. 凭借强大的插件生态系统和广泛的支持,Jenkins 可以处理各种工作负载来构建,测试和部署应用程序。

在之前的指南中,我们 安装了Jenkins在Ubuntu 22.04服务器上配置了Jenkins使用SSL使用Nginx反向代理程序

对于本教程,我们将将Jenkins与GitHub集成,以便在新代码被推到存储库时通知Jenkins。当Jenkins被通知时,它将检查代码,然后在Docker容器中测试它,以便从Jenkins主机中隔离测试环境。

前提条件

要跟随这个指南,你需要一个 Ubuntu 22.04 服务器,至少具有 1G 的 RAM 配置与安全的 Jenkins 安装. 要正确地保护 Web 接口,你需要为 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,您可能需要检查是否已启用了dockerdocker-pipeline插件。 要做到这一点,请从侧面栏点击 Manage Jenkins,然后从下一个菜单点击 Manage Plugins。 请点击插件菜单的 Available选项卡以搜索新插件,然后在搜索栏中键入docker。 如果Docker PipelineDocker plugin都返回为选项,并且未选择,请选择两者,并在提示时允许 Jenkins重新启用新的插件。

Jenkins Docker plugins

这应该需要大约一分钟,然后页面会被刷新。

在 GitHub 中创建个人访问令牌

为了让Jenkins观看你的GitHub项目,你需要在我们的GitHub帐户中创建一个个人访问代币。

首先,请访问 GitHub并登录您的帐户,如果您尚未登录,然后点击右上角的用户图标,并从下拉菜单中选择 设置:

GitHub settings item

在下面的页面上,查找左侧菜单中的 ** 开发者设置** 部分,然后点击 ** 个人访问代币**:

GitHub personal access tokens link

在下一页上点击生成新代币按钮:

GitHub generate new token button

你将被带到一个页面,在那里你可以定义你的新代币的范围。

在 ** Token 描述 ** 框中,添加一个描述,以便您稍后识别它:

GitHub token description

Select scope 部分中,请检查 repo:statusrepo:public_repoadmin:org_hook 框,这些框将允许 Jenkins 更新 commit 状态并为项目创建 webhooks。

GitHub token scope

当你完成时,点击 ** 生成代币** 在底部。

您将被重定向到个人访问代币索引页面,您的新代币将显示:

GitHub view new token

现在复制代币,以便我们可以稍后参考它,正如消息所示,一旦您离开此页面,就没有办法获取代币。

<$>[注意] 注意:正如上面的屏幕截图所提到的,出于安全原因,一旦您离开此页面,就无法重新显示该代币。

现在,您已经为您的 GitHub 帐户设置了个人访问代码,我们可以配置 Jenkins 来监控您的项目存储库。

将 GitHub 个人访问代币添加到 Jenkins

现在我们有一个代币,我们需要将其添加到我们的Jenkins服务器,以便它可以自动设置Webhooks。

点击您的用户名在右上角访问您的用户设置,从那里,点击 Credentials在左侧菜单。

Jenkins credentials item

在下一页上,单击 **(全球)**在 Jenkins范围内的箭头,在出现的框中,单击 添加凭证:

Jenkins add credentials button

您将被带到一个表格来添加新的凭证。

Kind下载菜单中,选择 秘密文本。在 秘密字段中,粘贴您的GitHub个人访问代币。填写 ** 描述**字段,以便您能够在以后的日期识别此条目。

Jenkins credentials form

点击OK按钮,当你完成。

您现在将能够从Jenkins的其他部分引用这些凭证来帮助配置。

设置 Jenkins 访问 GitHub

回到主Jenkins仪表板,在左手菜单中点击 Manage Jenkins:

Jenkins sidebar

在下一页的链接列表中,单击 配置系统:

Jenkins configure system link

浏览下一页的选项,直到您找到 GitHub部分。 点击 添加GitHub服务器按钮,然后选择 GitHub服务器:

Jenkins add GitHub server

Credentials下载菜单中,选择您在上一节中添加的GitHub个人访问代币:

Jenkins select GitHub credentials

点击测试连接按钮,Jenkins 将对您的帐户进行测试 API 调用并验证连接:

Jenkins test GitHub credentials

当你完成时,点击保存按钮来执行你的更改。

在您的 GitHub 帐户中设置示范应用程序

要演示如何使用Jenkins来测试应用程序,我们将使用由Hapi.js(https://hapijs.com/)创建的Hello world程序(https://github.com/do-community/hello_hapi)。

访问 项目存储库并点击右上角的 Fork按钮,在您的帐户中创建存储库的副本:

Fork example project

存储库的副本将被添加到您的帐户中。

该存储库包含一个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仪表板,在左手菜单中点击 新项目:

Jenkins side menu

输入项目名称字段中输入新管道的名称,然后选择管道作为项目类型:

Jenkins pipeline type

点击底部的OK按钮继续前进。

在下一个屏幕上,请检查 GitHub 项目 框. 在出现的 Project url 字段中,输入您的项目的 GitHub 库 URL。

<$>[注意] 注意:请确保指向您的Hello Hapi应用程序的叉子,以便Jenkins可以配置网页夹。

Jenkins add GitHub project

接下来,在Build Triggers 部分中,检查 GITScm 调查的 ** GitHub 链接触发器 ** 框:

Jenkins GitHub hook box

管道部分中,我们需要告诉Jenkins在我们的存储库中运行Jenkinsfile中定义的管道。

在出现的新部分中,请在 SCM菜单中选择 Git. 在出现的 Repository URL字段中,再次输入您的仓库叉的URL:

<$>[注] :再次,请确保指向您的Hello Hapi应用程序的叉子。

Jenkins GitHub add pipeline repository

<$>[注] :我们的示例引用了在公共存储库中可用的Jenkinsfile。如果您的项目无法公开访问,则需要使用 add credentials按钮来添加额外的存储库访问权限。

当你完成时,点击页面底部的保存按钮。

执行初始构建和配置 Webhooks

Jenkins 在界面中定义存储库的管道时不会自动配置 webhooks. 为了触发 Jenkins 设置相应的hooks,我们需要首次执行手动构建。

在你的管道的主页上,在左手菜单中点击 Build Now:

Jenkins build pipeline now

在左下角的构建历史框中,新构建应该在一瞬间出现,此外,在接口的主要区域将开始绘制一个阶段视图

Jenkins build progress

构建历史框中,点击与构建相关的号码,前往构建详细信息页面,从这里,您可以在左侧菜单中点击Console Output按钮,以查看所执行的步骤的详细信息:

Jenkins console output

当您完成时,请单击左侧菜单中的 ** 返回项目 ** 项,以返回主管视图。

现在我们已经构建了该项目一次,我们可以让Jenkins为我们的项目创建Webhooks。

Jenkins configure item

在此屏幕上不需要任何更改,只需点击底部的保存按钮.现在Jenkins从最初的构建过程中有有关该项目的信息,当您保存页面时,它将与我们的GitHub项目注册Webhook。

您可以通过访问您的 GitHub 存储库来验证这一点,然后点击设置按钮。下一页,从侧面菜单中点击Webhooks

Jenkins view webhooks

如果由于任何原因,Jenkins 未能注册链接(例如,由于 Jenkins 和 Github 之间的上游 API 变化或中断),您可以通过单击 ** Add webhook** 并确保 Payload URL 设置为 https://my-jenkins-server:8080/github-webhook,并将 Content type 设置为 application/json,然后在提示的底部再次单击 ** Add webhook**。

Github add webhook

现在,当您将新的更改推向您的存储库时,Jenkins将被通知,然后将引导新代码并使用相同的程序重新测试。

要接近这一点,在GitHub上的库页面中,您可以点击绿色 克隆或下载按钮左侧的 创建新文件按钮:

Jenkins create new file button

在下一页中,选择一个文件名和一些愚蠢的内容:

Jenkins new file contents

在您完成后,点击底部的 ** 承诺新文件** 按钮。

如果你回到你的Jenkins界面,你会看到一个新的构建自动启动:

Jenkins new build started

您可以通过向存储库的本地副本做出承诺并将其推回GitHub来启动额外的构建。

结论

在本指南中,我们将Jenkins配置为观看GitHub项目,并自动测试任何新的更改。Jenkins从存储库中提取代码,然后从单独的Docker容器中运行构建和测试程序。

有关 GitHub 操作的更多信息,请参阅 GitHub 的文档

Published At
Categories with 技术
comments powered by Disqus