【问题标题】:How to setup database service container in github workflow CI/CD?如何在 github 工作流 CI/CD 中设置数据库服务容器?
【发布时间】:2020-01-14 15:48:39
【问题描述】:

我有一个 laravel 应用程序和一个正常工作的 Postgis 容器。我正在尝试使用 github 工作流 beta 为我的项目设置 CI。我的工作流程在尝试访问数据库时失败。对于本地环境,我使用容器名称canie-db 设置我的数据库主机。但是在我的 github 工作流程中,我无法通过容器名称找到我的数据库主机。当它尝试运行我的测试时出现此错误:

Doctrine\DBAL\Driver\PDOException: SQLSTATE[08006] [7] 不能 将主机名“canie-db”转换为地址:名称中的临时故障 分辨率

这是我的.github/workflows/ci.yml

name: CanieCICD

on:
  push:
    branches:
      - master
      - stage
      - ci/cd-patch
  pull_request:
    branches:
      - stage
      - ci/cd-patch

jobs:
  build:

    runs-on: ubuntu-18.04

    services:
      canie-db:
        image: mdillon/postgis:10
        ports:
        - 5432:5432
        env:
          POSTGRES_DB: canie-db
          POSTGRES_USER: iabs_user
          POSTGRES_PASSWORD: p@ssw0rd

    steps:

    - uses: actions/checkout@v1

    - name: Use Node.js 12.x
      uses: actions/setup-node@v1
      with:
        node-version: 12.x

    - name: Install composer dependencies
      run: composer install --prefer-dist

    - name: Run PHPUnit tests # CI fails here!
      run: vendor/bin/phpunit --no-coverage

    - name: Install npm dependencies
      run: npm install

    - name: Run Mix
      run: npm run production

我的 Laravel 后端数据库配置文件 config/database.phphas 'default' => env('DB_CONNECTION', 'pgsql'),

'pgsql' => [
    'driver' => 'pgsql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', 'canie-db'),
    'port' => env('DB_PORT', '5432'),
    'database' => env('DB_DATABASE', 'canie-db'),
    'username' => env('DB_USERNAME', 'iabs_user'),
    'password' => env('DB_PASSWORD', 'p@ssw0rd'),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'schema' => 'public',
    'sslmode' => 'prefer',
],

我也尝试将docker-compose up -d canie-db 添加到我的工作流程中,但它也不起作用

【问题讨论】:

  • 这里是一个使用 postgres github.com/actions/example-services/blob/master/.github/… 的例子。主要问题是 posgres 没有定义健康检查,所以当你的脚本运行时它可能不会启动。
  • @ChrisPatterson 感谢您的工作示例!我快速尝试在“选项:”标签中添加健康检查,但没有成功。得到同样的错误。我一定错过了更多的东西
  • @ChrisPatterson 我将我的 CI 代码改编为您分享的示例,它神奇地开始工作。非常感谢!但还是一头雾水。

标签: laravel postgresql docker continuous-integration github-actions


【解决方案1】:

我认为答案已在 cmets 中说明,并在 https://github.com/actions/example-services/blob/master/.github/workflows/postgres-service.yml 发布的示例中进行了说明

为什么它不起作用是您的工作流程/步骤在 VM (ubuntu-18.04) 中运行,而 VM 不知道 canie-db

的 docker 容器主机名

一个解决方法是使用 localhost,因为端口是暴露的

'host' => env('DB_HOST', 'localhost'),

或者,就像您在示例中发现的那样,在容器中运行工作流和 postgres。这样主机 canie-db 是已知的。

container:
  image:  node:10.16-jessie

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 2019-12-29
    • 2018-10-10
    • 1970-01-01
    • 2021-11-26
    • 2019-08-07
    • 2020-10-08
    • 2021-11-13
    相关资源
    最近更新 更多