You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不上传.env文件时用Github Actions部署Laravel到AWS Elastic Beanstalk

解决Github Actions中Laravel测试的数据库连接问题(无需上传.env)

1. 配置Github仓库密钥

进入你的Github仓库「Settings」→「Secrets and variables」→「Actions」,添加以下必要密钥:

  • APP_KEY: 本地执行php artisan key:generate --show即可获取,这是Laravel加密功能的必要项。
  • 若需使用MySQL等外部数据库(CI测试更推荐用SQLite,轻量高效),额外添加DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD。

2. 修改Github Actions工作流文件

打开.github/workflows下的工作流yaml文件,调整测试环节的配置:

方案一:使用SQLite内存数据库(推荐)

该方案无需额外启动数据库服务,测试数据仅存于内存,测试结束自动销毁:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
          extensions: mbstring, pdo_sqlite, sqlite3
          coverage: none
          
      - name: Install dependencies
        run: composer install --no-interaction --prefer-dist
        
      - name: Prepare base environment
        run: cp .env.example .env
        
      - name: Generate app key
        run: php artisan key:generate
        env:
          APP_KEY: ${{ secrets.APP_KEY }}
          
      - name: Run database migrations
        run: php artisan migrate --force
        env:
          DB_CONNECTION: sqlite
          DB_DATABASE: ':memory:'
          
      - name: Execute tests
        run: php artisan test
        env:
          DB_CONNECTION: sqlite
          DB_DATABASE: ':memory:'

说明:

  • 复制.env.example作为基础配置模板,避免手动创建.env文件。
  • 通过env字段注入SQLite配置,迁移命令会直接在内存中创建users等所需表。

方案二:使用临时MySQL容器(适配生产环境模拟测试)

如果测试需贴合生产环境的MySQL配置,可在工作流中启动临时MySQL服务:

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: ${{ secrets.DB_PASSWORD }}
          MYSQL_DATABASE: ${{ secrets.DB_DATABASE }}
        ports:
          - 3306:3306
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=3
          
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
          extensions: mbstring, pdo_mysql
          coverage: none
          
      - name: Install dependencies
        run: composer install --no-interaction --prefer-dist
        
      - name: Prepare environment
        run: cp .env.example .env
        env:
          APP_KEY: ${{ secrets.APP_KEY }}
          DB_HOST: 127.0.0.1
          DB_PORT: 3306
          DB_DATABASE: ${{ secrets.DB_DATABASE }}
          DB_USERNAME: root
          DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
          
      - name: Run database migrations
        run: php artisan migrate --force
        
      - name: Execute tests
        run: php artisan test

说明:

  • 通过services字段启动MySQL容器,预先配置好数据库密码和名称。
  • 注入数据库相关环境变量后,Laravel可连接到临时服务,迁移命令会创建所需的users表。

3. 额外注意事项

  • 确保.env.example文件包含APP_KEY、DB_CONNECTION等基础配置项,方便注入环境变量覆盖。
  • 若测试依赖其他环境变量(如邮件、缓存配置),需同步在Github Secrets中添加并注入到工作流。
  • 迁移命令添加--force参数,避免CI环境中出现交互式确认提示。

内容的提问来源于stack exchange,提问作者Dirty Rex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:45:31