【发布时间】: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