为 Laravel 应用程序设置 GitHub Actions

最后更新于 作者:

Set up GitHub Actions for Laravel applications image

GitHub Actions 是一种运行持续集成工作流的绝佳方式,从运行测试到检查静态分析等等。

在您的 Laravel 应用程序中,运行工作流流程至关重要,以确保您的代码符合特定标准。在拥有 CI 管道之前,我们曾经在本地运行所有这些工作流,这导致了其他人忘记运行它们的问题。

在本教程中,我将引导您为 Laravel 应用程序设置 GitHub Actions,这样您就可以放心地坐下来,确保您的代码准备上线。

此过程的第一步是在项目的根目录中添加一个目录 .github/workflows。在这里,我们添加工作流文件,以便 GitHub 可以分别拾取并运行它们。从这一点开始,您可以根据需要设计您的工作流流程,从每个部分的单独工作流,到将它们全部合并到一个工作流中。

我将从测试工作流开始,因为这是最有可能首先开始的工作流。即使您只实现此工作流,您也已经朝着正确的方向迈出了第一步。

我不会对如何构建 GitHub Actions 进行完整演练,因为这是一个相当复杂的主题,它与您希望如何实现它们非常相关。工作流将逐步构建,使我们能够理解它的工作原理。

name: Run tests
 
on: [push]

首先,我们需要给工作流起一个名字,GitHub 将使用它来显示正在发生的事情。然后我们添加一个 on 条目,告诉 GitHub 这个工作流应该在哪些事件上运行。您可以在此处添加多个条目,并且可以使用各种事件。

我们的下一步是定义我们要运行的作业。每个工作流中都可以包含多个作业。但是,我通常将每个工作流限制为一个作业,以保持简单。

name: Run tests
 
on: [push]
 
jobs:
tests:
name: Run tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
 
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv
coverage: none
 
- name: Run composer install
run: composer install -n --prefer-dist
 
- name: Prepare Laravel Application
run: |
cp .env.ci .env
php artisan key:generate
 
- name: Run tests
run: php artisan test

我们的作业有一个名称,GitHub 将在显示正在发生的事情时用作标签。我们需要定义此作业将在哪里运行。这里我使用 ubuntu-latest,因为这通常是我的目标部署环境。这里有很多选项,可以针对特定版本的 OS,甚至可以针对可用的不同操作系统。然后,我们的作业包含作业需要运行的多个步骤,从检出代码到执行需要完成的操作。

大多数作业将从 checkout 操作开始,这是一个来自 GitHub 团队的官方操作。我在这里使用版本 3,因为它支持我项目中任何 JavaScript 的最新节点版本。如果您需要特定版本的节点,请查看每个版本的发布说明,以确保您匹配您的要求。

接下来,我们使用 shivammathur/setup-php@v2 操作,它用于设置我们的 PHP 环境。传入我们的 PHP 版本以及需要安装的任何 PHP 扩展。

然后我们安装我们的 PHP 依赖项,这样我们就可以确保在以后部署时我们的安装顺利进行。在每个步骤中,您可以运行打包的操作或可以运行的 CLI 命令。然后我们设置我们的 Laravel 应用程序,运行任何 Artisan 命令或我们可能需要做的任何其他事情。在我的项目中,我使用内存中运行的 SQLite 数据库作为我的测试数据库。如果您使用的是其他数据库,那么有很多可用的选项,这些选项都有详细的文档。在我这里,我只做了一件事,就是将指定的 .env.ci 文件复制到应用程序将使用的 .env 文件。然后我们可以使用 Artisan 命令生成应用程序的加密密钥。

我们最后一步是运行我们的测试套件,我使用 Artisan test 命令。您可以自己调用测试二进制文件或使用 Artisan 命令。您也可以在需要在 CI 中调试潜在测试失败的情况下,将任何其他选项添加到此命令中。

现在我们的初始工作流已经运行,我们可以看看另一个工作流。这次我们将使用我最喜欢的工作流之一来运行,即静态分析。正如许多人可能已经知道的那样,我是一个直言不讳的开发人员,总是挥舞着静态分析的旗帜。

对于下一部分,我将不再详细介绍所有步骤。相反,我们将重点关注最后部分。

name: Static Analysis
 
on: [push]
 
jobs:
phpstan:
name: phpstan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
 
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
coverage: none
 
- name: Install composer dependencies
run: composer install -n --prefer-dist
 
- name: Run Static Analysis
run: ./vendor/bin/phpstan --error-format=github

由于我们不需要运行应用程序,因此这次我们不必担心所有 PHP 依赖项。我们的最后一步是运行静态分析本身。我个人使用 PHPStan 作为我的静态分析工具。但是,这适用于任何可用的静态分析库。我传递 error-format 标志,以便任何潜在的错误都采用 GitHub 可以理解并为 CI 环境设计的格式。

您可以进一步进行,例如运行 Laravel Pint 或更多内容。但是,作为入门介绍,我认为这涵盖了您需要的知识。

Steve McDougall photo

《Laravel 新闻》的技术作家,Treblle 的开发者倡导者。API 专家,经验丰富的 PHP/Laravel 工程师。YouTube 直播主

Cube

Laravel 新闻简报

加入 40,000 多名其他开发者,永不错过新的提示、教程等内容。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成和对本地和生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

No Compromises

Joel 和 Aaron,来自 No Compromises 播客的两位经验丰富的开发者,现在可以为您的 Laravel 项目提供服务。 ⬧ 固定价格 7500 美元/月。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 满意退款保证。

No Compromises
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

运行的是旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,让您的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

让您的项目充满活力,仅需 2500 美元/月即可获得具有 4-6 年经验的经验丰富的 Laravel 开发人员。获得 160 小时的专门知识和 15 天的无风险试用。立即预约电话!

Bacancy
Lucky Media logo

Lucky Media

现在就获得 Lucky - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的力量带到 Laravel。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,包含运行现代 SaaS 所需的所有功能。付款、漂亮的结账、管理面板、用户仪表板、身份验证、就绪组件、统计信息、博客、文档等等。

SaaSykit: Laravel SaaS 启动工具包
Rector logo

Rector

您无缝升级 Laravel、降低成本和加速创新的合作伙伴,帮助企业取得成功

Rector
MongoDB logo

MongoDB

通过将 MongoDB 和 Laravel 强力整合,增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。在使用熟悉的 Eloquent API 的同时,支持事务性、搜索、分析和移动用例。探索灵活、现代的 MongoDB 数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包为您的 Laravel 应用程序添加评论

阅读文章