【发布时间】:2020-11-09 12:40:53
【问题描述】:
我在 gitlab-ci 中遇到问题。这是我的 gitlab-ci.yml。我的本地测试很好。所以我在容器中执行 codecept 并且测试运行良好。但在管道中它失败了。
image: docker:latest
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
before_script:
- docker info
- apk update
- apk upgrade
- apk add python3 python3-dev py-pip build-base libffi-dev openssl-dev
- pip install docker-compose
build:
stage: build
script:
- docker-compose up -d
- docker exec -i -e MYSQL_HOST=beerfridgeaccountingwebsite_claudia-app-db_1 -e MYSQL_DB=bierkasse_test -e MYSQL_USER=root -e MYSQL_PWD=rootPassword1 beerfridgeaccountingwebsite_claudia-app-php_1 /bin/sh -c "export && composer install && ./vendor/bin/codecept run functional"
我必须像这样将环境变量推入其中吗?认为主机是带有 mysql 数据库的标记容器。喜欢它的本地。并且导出显示了正确的值,所以 env vars 应该在里面?
这是 docker-compose 文件:
version: "3.4"
services:
claudia-app-nginx:
image: nginx:stable-alpine
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- claudia-app-php
claudia-app-php:
build:
context: .
dockerfile: docker/php/Dockerfile
volumes:
- .:/var/www/html
depends_on:
- claudia-app-db
claudia-app-db:
image: mysql:5.7
ports:
- 3306:3306
volumes:
- ./db_data:/var/lib/mysql
restart: always
entrypoint:
sh -c "
echo 'CREATE DATABASE IF NOT EXISTS bierkasse; CREATE DATABASE IF NOT EXISTS bierkasse_test;' > /docker-entrypoint-initdb.d/init.sql;
/usr/local/bin/docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
这是我的测试。我是否还需要使用环境。 var 在这里而不是使用带有所需数据的字符串?
public function testConnectionIsReturningProperly()
{
$connection = new Connection();
$connection->connect("beerfridgeaccountingwebsite_claudia-app-db_1", "bierkasse_test", "root", "rootPassword1");
}
这是代码中使用的 connect() 函数。从 .env 文件中本地化其加载变量。
$pdo = (new ConnectionDB)->connect($_SERVER['MYSQL_HOST'], $_SERVER['MYSQL_DB'], $_SERVER['MYSQL_USER'], $_SERVER['MYSQL_PWD']);
这是管道中codeception的错误:
Db: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Na
me does not resolve while creating PDO connection
提前感谢您的任何小提示。
【问题讨论】:
-
你传递给测试的数据库主机是未知的,你应该尝试 127.0.0.1 代替(在管道上下文中,docker compose 只是将你的数据库作为 docker 容器运行)
-
我解决了。主机未知,因为我忘记在 docker-compose 文件的环境中声明 rootPassword。我把这对 mysql 容器来说是强制性的。
标签: php environment-variables gitlab-ci