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

介绍

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

在本教程中,我们将演示如何设置Jenkins以便在将更改推送到存储库时自动测试应用程序。

我们将Jenkins与GitHub集成,以便在将新代码推送到存储库时通知Jenkins。当Jenkins收到通知时,它将检查代码,然后在Docker容器中对其进行测试,以将测试环境与Jenkins主机隔离。我们将使用示例Node.js应用程序来展示如何为项目定义CI/ CD进程。

准备

您需要一台Ubuntu 16.04服务器和至少1G的RAM。正确安装Jenkins,安装教程详见腾讯云实验室Jenkins 环境搭建,并为Jenkins服务器分配域名。

为了最好地控制我们的测试环境,我们将在Docker容器中运行测试我们的应用程序。在Jenkins启动并运行后,在服务器上安装Docker

将Jenkins用户添加到Docker组

在做好所有的准备后,Jenkins和Docker都已经安装在您的服务器上了。但是,默认情况下,负责运行Jenkins进程的Linux用户无法访问Docker。

要解决此问题,我们需要使用usermod命令将jenkins用户添加到docker组:

$ sudo usermod -aG docker jenkins

您可以列出该docker组的成员以确认jenkins已成功添加该用户:

$ grep docker /etc/group
docker:x:999:sammy,jenkins

为了让Jenkins使用其新成员的资格,您需要重新启动该进程:

$ sudo systemctl restart jenkins

借助我们在安装期间启用的一些默认插件,Jenkins现在可以使用Docker来运行构建和测试任务。

在GitHub中创建个人访问令牌

为了让Jenkins能够浏览您的GitHub项目,您需要在GitHub帐户中创建个人访问令牌。

首先访问GitHub并登录您的帐户。然后,单击右上角的用户图标,然后从下拉菜单中选择“设置”

GitHub settings item

在随后的页面上,找到左侧菜单的Developer settings部分,然后单击Personal access tokens

GitHub personal access tokens link

单击下一页上的Generate new token按钮:

GitHub Generate new token

您将进入一个页面,您可以在其中定义新令牌的范围。

令牌描述框中,添加一个描述:

令牌描述

Select scopes部分中,选中repo:statusrepo:public_repoadmin:org_hook框。这些将允许Jenkins更新提交状态并为项目创建webhook。如果您使用的是私人存储库,你需要选择一般的repo权限,而不是repo子项:

Select scopes

完成后,单击底部的生成令牌

您将被重定向回Personal Access tokens索引页面,并显示您的新令牌:

Personal Access tokens

立即复制令牌,以便我们以后可以引用它。因为离开此页面后我们就无法检索令牌了。

注意:如上面的屏幕截图所示,出于安全原因,离开此页面后无法重新显示令牌。如果您丢失了令牌,请从GitHub帐户中删除当前令牌,然后创建一个新令牌。

现在您已拥有GitHub帐户的个人访问令牌,我们可以配置Jenkins来监视您项目的存储库。

将GitHub个人访问令牌添加到Jenkins

现在我们有一个令牌,我们需要将它添加到我们的Jenkins服务器,以便它可以自动设置webhooks。使用您在安装期间配置的管理帐户登录Jenkins Web界面。

在主界面中,单击左侧菜单中的凭据

凭据

在下一页上,单击Jenkins范围内(全局)旁边的箭头。在显示的框中,单击“添加凭据”

添加凭据

您将被带到表单以添加新凭据。在Kind下拉菜单下,选择Secret text。在“密码”字段中,粘贴您的GitHub个人访问令牌。填写“说明”字段,以便您以后可以识别此条目。您可以将范围设置为全局,将ID字段留空:

credentials form

完成后单击“ 确定”按钮。您现在可以从Jenkins的其他部分引用这些凭据以帮助进行配置。

设置Jenkins访问GitHub

返回主Jenkins仪表板,单击左侧菜单中的Manage Jenkins

Manage Jenkins

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

配置系统

滚动下一页找到GitHub部分。单击Add GitHub Server按钮,然后选择GitHub Server

GitHub Server

该部分将扩展为提示输入一些其他信息。在“凭据”下拉菜单中,选择您在上一部分中添加的GitHub个人访问令牌:

select GitHub credentials

单击“ 测试连接”按钮。Jenkins将对您的帐户进行测试API调用并验证连接:

测试连接

完成后,单击“ 保存”按钮以实现更改。

在GitHub帐户中设置演示应用程序

为了演示如何使用Jenkins测试应用程序,我们将使用一个用Hapi.js创建的“hello world”程序。因为我们正在设置Jenkins以推送到存储库,所以您需要拥有自己的演示代码副本。

访问项目存储库,然后单击右上角的Fork按钮,在您的帐户中制作存储库的副本:

项目存储库

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

存储库包含一个package.json文件,用于定义运行时间和开发依赖项,以及如何运行测试套件。可以通过运行npm install来安装依赖项,并且可以使用运行npm test来进行测试。

我们也在repo中添加了一个Jenkinsfile。Jenkins读取此文件以确定要对存储库运行构建,测试或部署的操作。它是使用Jenkins Pipeline DSL的声明版本编写的。

包括在hello-hapi存储库中的Jenkinsfile看起来是这样的:

Jenkinsfile

#!/usr/bin/env groovy

pipeline {

    agent {
        docker {
            image 'node'
            args '-u root'
        }
    }

    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'npm install'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
                sh 'npm test'
            }
        }
    }
}

pipeline包含着Jenkins将评估的整个定义。在内部,我们有一个agent部分,指定管道中的操作将在何处执行。为了将我们的环境与主机系统隔离,我们将在docker代理指定的Docker容器中进行测试。

由于Hapi.js是Node.js的框架,我们将使用nodeDocker镜像作为基础。我们在容器中指定root用户,以便用户可以同时写入包含已签出代码的附加卷以及写入脚本输出的卷。

接下来,该文件定义了两个阶段,这两个阶段只是工作的逻辑划分。我们将第一个命名为“Build”,第二个命名为“Test”。Build步骤打印诊断消息,然后运行npm install以获取所需的依赖项。Test步骤打印另一条消息,然后按package.json文件中的定义运行测试。

我们可以设置Jenkins来监视Jenkinsfile存储库并在引入更改时运行该文件。

在Jenkins中创建一个新的管道

接下来,我们可以设置Jenkins使用GitHub个人访问令牌来查看我们的存储库。

返回主Jenkins仪表板,单击左侧菜单中的New Item

New Item

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

输入项目名称

单击底部的“ 确定”按钮继续。

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

注意:确保指向Hello Hapi应用程序的fork,以便Jenkins具有配置webhooks的权限。

Jenkins add GitHub project

接下来,在Build Triggers部分中,检查GITScm轮询框的GitHub钩子触发器

Build Triggers

Pipeline部分中,我们需要告诉Jenkins运行我们的存储库中Jenkinsfile定义的管道。从SCM将“定义”类型更改为“ 管道”脚本

SCM菜单中选择Git。在显示的Repository URL字段中,再次输入存储库fork的URL:

注意:再次确保指向Hello Hapi应用程序的fork。

Repository URL

注意:我们的示例引用了公共存储库中Jenkinsfile的可用内容。如果您的项目不可公开访问,则需要使用“添加凭据”按钮添加对存储库的其他访问权限。您可以像之前一样使用hook配置添加个人访问令牌。

完成后,单击页面底部的“ 保存”按钮。

执行初始构建并配置Webhook

在撰写本文时,当您在界面中为存储库定义管道时,Jenkins不会自动配置webhook。

为了触发Jenkins设置适当的hook,我们需要在第一次执行手动构建。

在管道的主页面中,单击左侧菜单中的“ 立即构建”

立即构建

这将开始新的构建。在左下角的“构建历史记录”框中,应该会显示新构建。此外,Stage视图将开始在界面的主区域中进行绘制。这将跟踪不同阶段完成后测试的运行进度:

Stage视图

在“构建历史记录”框中,单击与构建关联的数字以转到构建的详细信息页面。在此处,您可以单击左侧菜单中的“控制台输出”按钮以查看已运行步骤的详细信息:

完成后单击左侧菜单中的“ 返回项目”以返回主管道视图。

现在我们已经构建了一次项目,我们可以让Jenkins为我们的项目创建webhook。单击管道左侧菜单中的Configure

Configure

只需单击底部的“保存”按钮即可。因为Jenkins从初始构建过程中获得了有关项目的信息,那么当您保存页面时,它将在我们的GitHub项目中注册webhook。

您可以通过转到GitHub存储库并单击“设置”按钮来验证这一点。在下一页上,单击侧面菜单中的Webhooks。您应该在主界面中看到您Jenkins服务器的webhook:

webhook

现在,当您将新更改推送到存储库时,它将通知Jenkins。然后它将调取新代码并重新测试它。

为了验证这一点,在我们的GitHub上的存储库页面中,您可以单击克隆或下载按钮左侧的创建新文件按钮:

创建新文件

在下一页上,选择文件名和一些虚拟内容:

添加内容

完成后,单击底部的“ 提交新文件”按钮。

如果返回到Jenkins界面,您将看到自动启动的新版本:

Jenkins新版本界面

您可以通过提交存储库的本地副本并将其推回到GitHub来启动其他构建。

结论

本教程,我们将Jenkins与GitHub集成,新代码推送到存储库时通知Jenkins。当Jenkins收到通知时,它将检查代码,然后在Docker容器中对其进行测试,以将测试环境与Jenkins主机隔离。欢迎访问腾讯云社区查看关于更多Jenkins的相关内容


参考文献:《How To Set Up Continuous Integration Pipelines in Jenkins on Ubuntu 16.04》

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏肖洒的博客

JSP

1132
来自专栏SpringBoot 核心技术

SpringCloud组件:将微服务提供者注册到Eureka服务中心

Eureka提供了Server当然也提供了Client,如果你对Eureka Server不了解,点击SpringCloud组件:搭建Eureka服务注册中心阅...

3704
来自专栏PPV课数据科学社区

【聚焦】企业数据收集网页采集解决方案 附PDF下载

原文:http://www.ppvke.com/Answer/file/download/file_name-5LyB5Lia5pWw5o2u5pS26ZuG6...

3635
来自专栏一“技”之长

使用Jenkins配置iOS自动化构建工具 原

      关于iOS自动化构建其实并不复杂,通过一些简单的Git与Xcode指令,加上UI,我们自己也可以动手编写一款自动化构建工具。这在之前的博客中也有涉及...

1011
来自专栏coding

为python版本抓狂,试下pyenv吧安装pyenv版本切换pyenv-virtualenv小结

写python时,最烦的事莫过于版本切换。python3已经很成熟了,但很多生产项目依然用的是2.7版本,本地环境经常需要切换版本。此外,不同项目的依赖也不同,...

2062
来自专栏salesforce零基础学习

salesforce 零基础学习(二十九)Record Types简单介绍

在项目中我们可能会遇见这种情况,不同的Profile拥有不同的页面,页面中的PickList标签可能显示不同的值。这个时候,使用Record Types可以很便...

2006
来自专栏jiajia_deng

RESTful API 调试工具 insomnia

1265
来自专栏无所事事者爱嘲笑

parcel 中小型项目打包工具

1763
来自专栏battcn

一起来学SpringBoot | 第二十四篇:数据库管理与迁移(Liquibase)

目前 SpringBoot 支持较好的两款工具分别是 flyway、 liquibase,支持 sql script,在初始化数据源之后执行指定的 脚本代码或者...

1662
来自专栏Java后端技术栈

使用Generic Webhook Trigger插件实现Jenkins+WebHooks(码云)持续集成

我们在开发的时候,特别是前后端分离的时候,前端需要我们后端提供的API接口,可能需要每次有一个接口的变动都需要重新部署到dev环境上,例如:最常见的Git工作流...

2193

扫码关注云+社区

领取腾讯云代金券