搜索
首页后端开发php教程重新引入詹金斯:使用管道的自动测试

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
高流量网站的PHP性能调整高流量网站的PHP性能调整May 14, 2025 am 12:13 AM

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

PHP中的依赖注入:初学者的代码示例PHP中的依赖注入:初学者的代码示例May 14, 2025 am 12:08 AM

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

PHP性能:是否可以优化应用程序?PHP性能:是否可以优化应用程序?May 14, 2025 am 12:04 AM

是的,优化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)优化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,并避免使用

PHP性能优化:最终指南PHP性能优化:最终指南May 14, 2025 am 12:02 AM

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

PHP依赖注入容器:快速启动PHP依赖注入容器:快速启动May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依赖注入与服务定位器PHP中的依赖注入与服务定位器May 13, 2025 am 12:10 AM

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

PHP性能优化策略。PHP性能优化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP电子邮件验证:确保正确发送电子邮件PHP电子邮件验证:确保正确发送电子邮件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

See all articles

热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

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

热门文章

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)