如何为 Laravel 项目设置 Github Actions?

Laravel

这个指南将为你展示如何配置一个 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

您可能需要对自己的配置进行一些调整,之后您应该能够看到构建通过。

Github Actions Build

使用 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 最近实现了在你最后操作的状态中包含徽章的功能。 你过去可能在开源项目中看到过其中一些。如果想引入在你的项目中,可以查看 这里
简而言之,你只需要使用以下代码:

[![Actions Status](https://github.com/{owner}/{repo}/workflows/{workflow_name}/badge.svg)](https://github.com/{owner}/{repo}/actions)

Owner 是 repo 的所有者,repo 显然是 repo 名称,而 workflow_name 是工作流文件中的 name 属性(通常是第 2 行)。

下面看到我创建的示例存储库中呈现的徽章:

Laravel

代码如下所示:

[![Actions Status](https://github.com/luisdalmolin/laravel-ci-test/workflows/CI/badge.svg)](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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-github-...

译文地址:https://learnku.com/laravel/t/62096

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!