目录
安装Jenkins
创建第一个作业
Jenkinsfile
多分支Pipeline项目
更进一步
总结
Jenkins使用Pipeline进行自动化测试的常见问题解答
使用Jenkins进行自动化测试的好处是什么?
如何为PHP测试设置Jenkins?
Jenkins如何与PHPUnit一起进行测试?
使用PHPUnit的Jenkins PHP应用程序的正确工作流程是什么?
如何在Jenkins中解析PHPUnit和JUnit结果?
首页 后端开发 php教程 重新引入詹金斯:使用管道的自动测试

重新引入詹金斯:使用管道的自动测试

Feb 10, 2025 pm 03:01 PM

Re-Introducing Jenkins: Automated Testing with Pipelines

核心要点

  • Jenkins是一款流行的开源构建服务器,支持对复杂应用程序进行自动化测试,通过在部署前发现和解决错误来加快发布流程。
  • Jenkins Pipeline(在2.0版本中引入)是一组用Groovy脚本语言编写的可定制步骤,用于测试和构建代码。如果一个步骤失败,整个构建都会失败,Jenkins将停止执行。
  • Jenkins可以使用Laravel Homestead轻松安装和配置。设置完成后,可以创建一个新的构建作业来检出项目的最新版本,安装依赖项并运行单元测试。
  • Jenkins Pipeline可以作为Jenkinsfile脚本写在代码库的根目录中,从而实现版本控制。还可以设置多分支Pipeline作业,以便对项目的不同分支运行不同的操作。
  • Jenkins支持广泛的插件生态系统,可以安装和配置这些插件来扩展其功能,包括测试插件和与云服务的集成。可以将其配置为在每次将提交推送到存储库时自动构建,并且应该正确地进行安全保护。

随着应用程序变得越来越复杂——包含Composer依赖项、Webpack构建脚本和每个环境变量——我们不可避免地会达到这样一个点:测试所有这些不同的复杂性变得缓慢而费力,尤其是在每次测试都需要拆除和重建整个环境时。同样,代码风格也可能随着时间的推移而发生偏差,创建可用于生产的部署归档需要遵循一组特定的步骤。

假设要测试应用程序,需要执行以下步骤:

  1. 运行composer install以确保安装了依赖项
  2. 对代码库中的每个PHP文件运行php -l以检查语法错误
  3. 运行PHPUnit进行单元测试
  4. 运行Codeception进行功能测试

Re-Introducing Jenkins: Automated Testing with Pipelines

如果这些步骤中的任何一个失败,则在解决错误之前,软件应被认为不适合部署。随着软件变得越来越复杂,测试数量随着时间的推移而增加,运行完整的测试套件可能需要几分钟的时间,这会减慢开发人员的速度,进而减慢发布流程。

为了克服这个问题,可以在开发工作流程中引入构建服务器。构建服务器运行一段软件,使您可以反复运行一系列步骤,如果其中一个步骤失败,构建服务器可以通知您问题。如果您参与过开源项目,您可能已经看到过TravisCI或CircleCI等构建服务器的实际应用。例如,Laravel项目的每个拉取请求都由TravisCI进行测试,以确保更改不会破坏任何测试,然后StyleCI确保代码更改与项目代码风格匹配。

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins是一款流行的开源构建服务器,今年发布了2.0版本。此新版本的主要功能之一是将(以前可选的)Pipeline插件作为核心功能包含在内。

Pipeline是一组完全可定制的步骤,可以按顺序运行以测试和构建代码。Pipeline是用Groovy脚本语言编写的,它具有非常简单的语法,易于上手。例如,如果要将前面描述的测试步骤描述为Pipeline,它可能看起来类似于这样:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
登录后复制
登录后复制
登录后复制
登录后复制

node语句告诉Jenkins分配一个单独的构建节点(Jenkins可以以单服务器模式或多节点设置运行)。node块内有多个阶段,每个阶段执行特定操作。Jenkins将依次运行每个阶段,如果任何一个阶段失败,则整个构建将失败,Jenkins将停止执行。

从这个简单的示例中,可以轻松地添加其他测试的附加阶段,告诉Jenkins发送成功或失败构建的Slack通知,将成功测试的代码推送到发布分支或将拉取请求标记为可以合并。

安装Jenkins

Jenkins非常易于安装,在本教程中,我们将使用Laravel Homestead提供一致的虚拟环境,以便您可以在本地使用Jenkins。

第一步是安装Laravel Homestead——这里有一个有用的指南。您只需要启动和运行虚拟机,我们不需要在homestead.yaml文件中配置任何站点。

启动并运行Homestead虚拟机后,使用vagrant ssh登录到它。

Homestead附带了我们所需的所有依赖项,即Git、PHP和Composer,因此我们只需要安装Jenkins本身。按照Jenkins Debian软件包指南,我们需要执行以下步骤。

运行wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -。此命令将代码签名密钥添加到Aptitude,以便信任来自此存储库的Jenkins软件包。

接下来,需要更新软件包源列表,以便Aptitude知道Jenkins软件包存储库。执行echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee -a /etc/apt/sources.list

最后,我们需要Aptitude更新其可用软件包的缓存,然后安装Jenkins:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
登录后复制
登录后复制
登录后复制
登录后复制

安装Jenkins大约需要五分钟,因为它还有许多也需要安装的依赖项。

安装Jenkins后,在浏览器中打开http://192.168.10.10:8080(或您配置的虚拟主机URL,例如homestead.app),您应该会看到一个标题为“解锁Jenkins”的页面。

Re-Introducing Jenkins: Automated Testing with Pipelines

在虚拟机中,运行以下命令——sudo cat /var/lib/jenkins/secrets/initialAdminPassword,一个随机的数字和字母字符串将打印到控制台。将该字符串复制并粘贴到浏览器中的文本字段中,然后按“继续”。

Re-Introducing Jenkins: Automated Testing with Pipelines

您将看到两个选项——选择“安装建议的插件”,然后等待几分钟,直到插件下载并安装完成。

Re-Introducing Jenkins: Automated Testing with Pipelines

在下一个屏幕上,输入管理员用户的详细信息,然后按“保存并完成”。

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins现在已安装并配置!

创建第一个作业

设置Jenkins后,我们将创建一个新的构建作业,该作业将执行以下操作:

  1. 检出laravel/framework的最新版本
  2. 安装Composer依赖项
  3. 运行PHPUnit

单击仪表板上的“创建新作业”链接(或“新建项目”链接——它们都执行相同的操作)。

Re-Introducing Jenkins: Automated Testing with Pipelines

输入名称laravel,选择“Pipeline”,然后按“确定”。

您现在将看到该作业的配置编辑器。向下滚动到Pipeline部分,然后输入以下脚本:

sudo apt-get update && sudo apt-get install jenkins
登录后复制
登录后复制
登录后复制

按“保存”。您将被重定向到作业概述页面,几秒钟后,您将看到作业启动。如果它没有启动,只需单击左侧菜单中的“立即构建”链接。

Re-Introducing Jenkins: Automated Testing with Pipelines

当我们在Pipeline脚本中定义的每个阶段开始和结束时,阶段视图将更新。

如果单击某个阶段,将出现一个覆盖层,其中包含该阶段的日志输出,这对于调试非常有用。或者,您可以单击左侧菜单中的作业,然后单击“控制台”。

所有Jenkins作业都有自己的工作区,这是一个区域,您可以在其中安全地创建构建区域中可能需要的任何临时文件。此作业的工作区位置可以在/var/lib/jenkins/workspace/laravel中找到。默认情况下,Jenkins不会为每次构建清除此工作区。如果需要这样做,可以将一个阶段添加到Pipeline脚本的开头,如下所示:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
登录后复制
登录后复制
登录后复制
登录后复制

Jenkinsfile

对于我们的第一个作业,我们在作业设置界面中编辑了Pipeline脚本。但是,将此脚本与我们的代码一起保存在版本控制中会更有用。

使用Jenkins的Pipeline,您可以将Pipeline作为Jenkinsfile脚本写在代码存储库的根目录中,它将被发现并运行。它的概念类似于您可能已经熟悉的.travis.yml.circleci.yml文件。

laravel/framework Github项目页面上,单击右上角的“fork”按钮,然后单击弹出窗口中的个人资料。

创建一个名为jenkinsfile的新分支,然后创建一个新文件(可以直接在Github中执行此操作,如果不需要,则不必克隆存储库)。

Re-Introducing Jenkins: Automated Testing with Pipelines

输入以下脚本并提交文件:

sudo apt-get update && sudo apt-get install jenkins
登录后复制
登录后复制
登录后复制

现在返回Jenkins,然后单击左侧菜单中的“配置”按钮。向下滚动到Pipeline部分,并将“定义”下拉菜单从Pipeline脚本更新为SCM。

Re-Introducing Jenkins: Automated Testing with Pipelines

输入您已分叉的存储库的详细信息,然后点击“保存”。

Re-Introducing Jenkins: Automated Testing with Pipelines

在作业概述屏幕上,单击左侧菜单中的“立即构建”。您应该有一个成功的构建。

多分支Pipeline项目

大多数软件项目使用存储库中的多个分支来定义项目的不同阶段。例如:

  • master分支代表当前的生产版本
  • develop分支代表当前的暂存版本
  • feature/new-profile-page分支可能代表正在进行的功能

对于每个分支,您可能希望运行许多自定义操作——例如,每当master或develop分支有提交时,您都希望运行完整的单元和集成测试,而在所有其他分支上,只有单元测试就足够了。

Jenkinsfile是用Groovy编程语言编写的,这意味着我们有了一个完整的脚本语言可以使用。

在这个例子中,我添加了一个if语句来检查分支名称;如果它是master或develop,则Jenkins应该运行integration_tests阶段。

之后,有一个switch语句,根据分支名称,创建一个不同的部署归档并将其注册到代码部署服务(在这个例子中,我演示了这将如何与Amazon Web Service的CodeDeploy服务一起工作)。

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
登录后复制
登录后复制
登录后复制
登录后复制

多分支Pipeline作业同样易于设置——创建项目时,选择“多分支Pipeline”作为类型:

Re-Introducing Jenkins: Automated Testing with Pipelines

然后,在配置屏幕中,将Pipeline定义下拉菜单设置为SCM中的Pipeline脚本,并输入存储库详细信息。

每当运行“分支索引”选项(它替换作业内的“立即构建”菜单项)时,Jenkins将递归迭代存储库中的每个分支,并且对于最近更改的每个具有Jenkinsfile的分支,将运行该分支的新构建。

更进一步

Jenkins的流行很大程度上归功于其广泛的插件生态系统。

在Jenkins主屏幕上,单击左侧菜单中的“管理Jenkins”,然后单击“插件管理器”。

Re-Introducing Jenkins: Automated Testing with Pipelines

您可以安装和配置数十个插件,从测试插件到与云服务的集成。

例如,如果您的团队使用Slack,您可以启用Slack Notification插件。在主要的Jenkins设置屏幕(“管理Jenkins”->“配置系统”)中对其进行配置,然后可以将Slack消息作为Pipeline脚本的一部分发送:

sudo apt-get update && sudo apt-get install jenkins
登录后复制
登录后复制
登录后复制

在服务器上启动并运行Jenkins后,可以轻松配置作业,以便在每次将提交推送到存储库时自动构建(或运行分支索引)。

对于Github项目,请确保已安装并启用了Github插件,然后在Github存储库设置中启用与“Jenkins(Github插件)”服务的集成。

对于Bitbucket,这稍微复杂一些,我已经在我的博客上详细介绍了所需步骤。

还应该确保Jenkins服务器已正确保护——可以在Jenkins中手动创建用户,使用OAuth将身份验证委托给Github或Bitbucket,或者将Jenkins连接到组织的LDAP目录。同样,应该始终通过SSL运行Jenkins,以便无法轻松拦截对Jenkins的访问。

Jenkins安装还附带一个“代码片段生成器”,它允许您查看所有启用的Pipeline函数(例如,我们已经使用过的sh、slackSend、deleteDir()和scm)。您可以在作业概述屏幕的左侧菜单中找到指向它的链接。

总结

Jenkins是一个非常强大的工具,可以帮助提高软件的可靠性,并为您和您的团队节省大量时间。人类非常不擅长一遍又一遍地执行重复性任务,但是,计算机擅长这一点。

如果您的团队因运行时间超过五分钟的测试而速度变慢,请将该测试卸载到Jenkins。

如果希望在新的生产或暂存版本可用时自动生成部署归档,Jenkins可以做到这一点。

如果希望密切关注代码质量并在客户发现之前发现回归,那么Jenkins随时准备提供帮助。

请在下方留下任何问题或评论,并告诉我们您最具创意的Jenkins Pipeline!

如果您喜欢这篇文章,您可能还会发现以下内容有用:

  • Cypress测试:运行Web应用程序测试指南
  • 使用unittest和pytest介绍Python单元测试
  • 如何使用Jest测试React组件
  • 使用Puppeteer学习端到端测试
  • 三种免提持续测试方法

Jenkins使用Pipeline进行自动化测试的常见问题解答

使用Jenkins进行自动化测试的好处是什么?

Jenkins是一个流行的开源工具,它为自动化测试提供了许多好处。首先,它提供了持续集成和持续交付(CI/CD),允许开发人员更频繁地将更改集成到项目中。这导致及早发现潜在问题并减少修复时间。其次,Jenkins支持各种插件,使其高度可定制并适应不同的项目需求。第三,它提供实时测试结果和详细报告,这有助于快速识别和解决问题。最后,Jenkins支持Pipeline,这是一组工具,允许通过Pipeline领域特定语言(DSL)将简单到复杂的交付Pipeline“作为代码”建模。

如何为PHP测试设置Jenkins?

为PHP测试设置Jenkins涉及几个步骤。首先,需要在服务器上安装Jenkins。安装后,可以安装PHP测试所需的插件,例如PHP插件、PHPUnit插件等。安装插件后,可以创建一个新的Jenkins作业并为PHP项目配置它。这包括设置源代码管理、构建触发器和构建步骤。在构建步骤中,可以指定运行PHP测试的命令。配置完成后,可以运行作业,Jenkins将执行测试并提供详细报告。

Jenkins如何与PHPUnit一起进行测试?

Jenkins通过在Jenkins作业中执行PHPUnit测试来与PHPUnit一起工作。可以在Jenkins作业的构建步骤中指定PHPUnit命令。运行作业时,Jenkins将执行PHPUnit测试并捕获结果。然后在Jenkins仪表板中显示结果,提供测试执行的详细报告。这包括运行、通过、失败和跳过的测试数量,以及代码覆盖率。

使用PHPUnit的Jenkins PHP应用程序的正确工作流程是什么?

使用PHPUnit的Jenkins PHP应用程序的正确工作流程通常包括以下步骤:首先,从版本控制系统检出源代码。接下来,安装任何依赖项,例如PHP项目的Composer。然后,运行PHPUnit测试。然后收集测试结果并在Jenkins仪表板中显示。如果任何测试失败,则构建标记为失败。否则,构建标记为成功。可以使用Jenkins Pipeline自动化此工作流程,从而实现持续集成和交付。

如何在Jenkins中解析PHPUnit和JUnit结果?

可以使用JUnit插件在Jenkins中解析PHPUnit和JUnit结果。运行PHPUnit测试后,可以生成JUnit XML报告。然后,Jenkins中的JUnit插件可以解析此报告。在Jenkins作业的后构建操作中,可以添加“发布JUnit测试结果报告”操作并指定JUnit XML报告的位置。然后,Jenkins将解析报告并在仪表板中显示结果。这包括运行、通过、失败和跳过的测试数量,以及测试持续时间和趋势。

以上是重新引入詹金斯:使用管道的自动测试的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试? 在PHPStorm中如何进行CLI模式的调试? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章讨论了框架中的基本安全功能,以防止漏洞,包括输入验证,身份验证和常规更新。

如何在系统重启后自动设置unixsocket的权限? 如何在系统重启后自动设置unixsocket的权限? Mar 31, 2025 pm 11:54 PM

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

PHP 8.1中的枚举(枚举)是什么? PHP 8.1中的枚举(枚举)是什么? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

See all articles