Laravel Github Actions
发布于 作者 Luis Dalmolin
本教程将向您展示如何配置 Github actions 来运行您的 phpunit
测试,如何在测试通过后部署代码,以及其他一些操作。我们还将向您展示如何连接到数据库(MySQL、Postgres 或 SQLite)以运行您的测试套件。
首先,我们需要一个安装了 PHP 的 Docker 容器,该容器能够运行我们的 Laravel 测试套件。我们(KDG)为此目的专门制作了一个 Docker 容器。该 Docker 容器可以在以下位置找到:
- PHP 7.4:
kirschbaumdevelopment/laravel-test-runner:7.4
- PHP 7.3:
kirschbaumdevelopment/laravel-test-runner:7.3
- PHP 7.2:
kirschbaumdevelopment/laravel-test-runner:7.2
Github 仓库可以在 Laravel 测试运行器容器 中找到。如果您发现任何库缺失,请打开问题或提交拉取请求。
我们还创建了这个 示例仓库,它使用下面提到的设置来运行测试套件。
好了,让我们开始吧!
设置 Github Action
您可能需要调整一些内容,但基本上您可以直接复制粘贴以下配置到您的 Github actions 中。
.github/workflows/ci.yml
on: pushname: CIjobs: phpunit: runs-on: ubuntu-latest container: image: kirschbaumdevelopment/laravel-test-runner:7.3 services: mysql: image: mysql:5.7 env: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: test ports: - 33306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v1 with: fetch-depth: 1 - name: Install composer dependencies run: | composer install --no-scripts - name: Prepare Laravel Application run: | cp .env.ci .env php artisan key:generate - name: Run Testsuite run: vendor/bin/phpunit tests/
不要忘记配置您的 env!
在这个示例中,我创建了一个 .env.ci
文件,其中包含一些配置。以下是在此文件中需要配置的要点:
# databaseDB_CONNECTION=mysqlDB_HOST=mysqlDB_PORT=3306DB_DATABASE=testDB_USERNAME=rootDB_PASSWORD=password
您可能需要根据自己的配置进行一些调整,但调整后应该能够看到构建成功。
使用 PostgreSQL 或 SQLite 代替 MySQL
要使用 PostgreSQL 代替 MySQL,您可以轻松地用以下内容更改 CI 配置中的 services
部分:
services: postgres: image: postgres:10.8 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: test ports: - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
还要将您的 .env.ci
DB 配置更改为:
DB_CONNECTION=pgsqlDB_HOST=postgresDB_PORT=5432DB_DATABASE=testDB_USERNAME=postgresDB_PASSWORD=postgres
要使用 *SQLite*,您应该可以完全删除 services
部分,并将您的环境配置更改为:
DB_CONNECTION=sqliteDB_DATABASE=:memory:
编译资产也很容易
如果您使用 kirschbaumdevelopment/laravel-test-runner
Docker 容器来运行您的测试套件,那么它已经安装了 Node/NPM/Yarn。您可以通过在管道中添加一个新的步骤来安装依赖项/编译资产:
- name: Install front-end dependencies run: | npm install npm run dev
这应该就足够了!
在测试套件通过后部署您的代码
您可以在所有测试通过的情况下轻松地自动部署您的代码。我假设您已经有了一种自动部署代码的方法,因此不会详细介绍如何执行此操作,以及所有不同的可用选项。
假设您希望在构建通过后部署到 Laravel Forge。
- name: Deploy to Laravel Forge run: curl ${{ secrets.FORGE_DEPLOYMENT_WEBHOOK }}
在这种情况下,您需要在仓库密钥中注册 FORGE_DEPLOYMENT_WEBHOOK
。
或者,如果您想部署到 Vapor
- name: Deploy to Laravel Forge run: | export VAPOR_API_TOKEN="${{ secrets.VAPOR_API_TOKEN }}" vapor deploy staging
当然,还需要在仓库密钥中注册 VAPOR_API_TOKEN
。
徽章
Github 最近实现了在您的 actions 中包含徽章的功能,以显示您的 actions 的最新状态。您可能过去在一些开源项目中看到过这种徽章。如果您想在您的项目中包含徽章,可以在这里找到文档 here。简而言之,您只需要以下 Markdown 代码即可:
[![Actions Status](https://github.com/{owner}/{repo}/workflows/{workflow_name}/badge.svg)](https://github.com/{owner}/{repo}/actions)
Owner 是仓库所有者,repo 是仓库名称,workflow_name
是您工作流程文件中的 name
属性(通常是第二行)。
下面是您可以在我创建的示例仓库中看到的渲染后的徽章:
此徽章的代码如下:
[![Actions Status](https://github.com/luisdalmolin/laravel-ci-test/workflows/CI/badge.svg)](https://github.com/luisdalmolin/laravel-ci-test/actions)
额外:在您的管道中配置 Laravel Nova
如果您的 Laravel 项目使用 Laravel Nova,您需要在安装依赖项之前对 composer 进行身份验证。您可以通过添加以下步骤来配置 Nova 身份验证:
- name: Configure composer for Laravel Nova run:| composer config "http-basic.nova.laravel.com" "${{ secrets.NOVA_USERNAME }}" "${{ secrets.NOVA_PASSWORD }}"
另外,不要忘记将 NOVA_USERNAME
和 NOVA_PASSWORD
添加到您的 Github Actions 密钥中。此配置可以在仓库设置 > Actions 中找到。
Luis 是 Kirschbaum 的高级开发人员,拥有超过 10 年的复杂应用程序架构经验,从 Laravel 4 的早期就开始使用 Laravel。
除了 PHP 和 Laravel,Luis 还擅长 VueJS/Javascript 和所有与 DevOps 相关的技术。他喜欢参与开源项目,并为社区贡献了几个开源项目。
Luis 在 Feevale 大学教授 AngularJS 课程,在那里他还获得了互联网系统学位,并且他将 Dayle Rees 的 Laravel 图书“Code Bright”翻译成了葡萄牙语。