【问题标题】:GitLab Ci enviroment variables. Tests working local but not in the pipelineGitLab Ci 环境变量。测试在本地工作但不在管道中
【发布时间】: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


【解决方案1】:

在 docker compose 文件中,mysql 容器的环境下需要有一个 rootPassword。 这是 docker hub 中的描述: MYSQL_ROOT_PASSWORD 此变量是必需的,并指定将为 MySQL root 超级用户帐户设置的密码。在上面的示例中,它被设置为 my-secret-pw。 https://hub.docker.com/_/mysql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2022-01-16
    • 2020-03-21
    • 2022-01-26
    • 1970-01-01
    • 2021-10-20
    • 2021-04-17
    • 2021-03-20
    相关资源
    最近更新 更多