如何为 Laravel 项目设置 Github Actions?
这个指南将为你展示如何配置一个 Github Actions 来运行你的 phpunit
测试,和如何部署一些在你的测试通过后要运行的的其它事情。我们也将向你展示如何连接一个数据库( MySQL,Postgres 或者是 SQLite )以运行你的一整套测试。
首先我们需要一个可以运行我们 Laravel 测试套件的 Docker 容器,并且容器安装了 PHP 环境。我们在处理 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 测试容器 找到。如果你发现缺少满足你需求的库,请提 issue 或合并请求。
我们还创建了这个 示例存储库,它使用下面的设置来运行测试套件。
好吧,让我们开始!
设置 Github 操作
您可能需要进行一些调整,但基本上可以将以下配置复制并粘贴到您的 Github 操作中。
.github/workflows/ci.yml
on: push
name: CI
jobs:
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
文件。 以下是您在此文件中配置的重要内容:
# database
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_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_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=test
DB_USERNAME=postgres
DB_PASSWORD=postgres
要使用 SQLite,应该完全删除 services
部分,并将您的环境配置更改为:
DB_CONNECTION=sqlite
DB_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 }}
在这种情况下,需要在存储库密钥中注册 「FOR DEPLOYMENT WEBHOOK」。
或者你想要部署在 Vapor:
- name: Deploy to Laravel Forge
run: |
export VAPOR_API_TOKEN="${{ secrets.VAPOR_API_TOKEN }}"
vapor deploy staging
请在存储库密钥中注册 「VAPOR_API_TOKEN」。
徽章
Github 最近实现了在你最后操作的状态中包含徽章的功能。 你过去可能在开源项目中看到过其中一些。如果想引入在你的项目中,可以查看 这里
简而言之,你只需要使用以下代码:
[](https://github.com/{owner}/{repo}/actions)
Owner 是 repo 的所有者,repo 显然是 repo 名称,而 workflow_name
是工作流文件中的 name
属性(通常是第 2 行)。
下面看到我创建的示例存储库中呈现的徽章:
代码如下所示:
[](https://github.com/luisdalmolin/laravel-ci-test/actions)
额外:在管道上配置 Laravel Nova
项目中使用 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 机密中。 可以在 repository settings
> actions
中找到此配置。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: