【问题标题】:CircleCI & Cakephp - Cannot connect to database for phpunit testsCircleCI & Cakephp - 无法连接到数据库进行 phpunit 测试
【发布时间】:2019-01-07 04:18:50
【问题描述】:

我已经开始配置我的项目的 CircleCI 集成。我已经使用 2.0 标准创建了配置文件。除了我创建的 phpunit 测试之外,我已经让它运行顺利、部署和一切正常。当我运行 phpunit 命令时,它返回一个错误(我相信他无​​法连接到数据库)。

Unable to insert fixtures for "App\Test\TestCase\Model\Table\UsersTableTest" test case. SQLSTATE[HY000] [2002] No such file or directory in [***/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureManager.php, line 356]

这是我的测试数据库配置:

 'test' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
//            'port' => '3306',
            'database' => 'common_resources_test',
            'username' => 'root',
            'password' => 'root',
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'cacheMetadata' => true,
            'quoteIdentifiers' => false,
        ],

这是我的circleCI代码:

version: 2
jobs:
  build:
    working_directory: *removed*
    parallelism: 1
    shell: /bin/bash --login
    environment:
      CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
      CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
      DEBUG: true
    docker:
    - image: circleci/php:7.1-apache
    steps:
    - checkout
    - run:
        name: Install Maria DB
        command:  sudo apt-get install -y mariadb-server-10.1 mariadb-server-core-10.1 mariadb-client-10.1 mariadb-client-core-10.1
    - run:
        name: Initializing Mysql
        working_directory: *removed*
        command: 'sudo service mysql status || sudo service mysql restart; '
    - run:
        name: Set password
        command: sudo mysql -u root -e "USE mysql; UPDATE user SET password=PASSWORD('root') WHERE User='root';FLUSH PRIVILEGES;"
    - run:
        name: Check settings
        command: sudo mysql -u root -proot -e "USE mysql; SELECT host FROM user WHERE user = 'root';grant all privileges on *.* to root@'127.0.0.1' identified by 'root';FLUSH PRIVILEGES; SELECT host FROM user WHERE user = 'root';SELECT @@port;SELECT @@hostname;"
    - run:
        name: Restarting Mysql
        working_directory: *removed*
        command: 'sudo service mysql status || sudo service mysql restart; '
    - run:
        name: Create Mysql database and show current databases
        command: sudo mysql -uroot -proot -e "create database common_resources_test;SHOW DATABASES"
    - run:
        name: Install required Libraries for PHP-GD
        command: sudo apt-get update && sudo apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
    - run:
        name: Install PHP Extensions (PHP-GD && PDO-MYSQL)
        command: sudo docker-php-ext-install gd && sudo docker-php-ext-install pdo_mysql
    - run:
        name: Install Other required Libraries for PHP & Activating PHP-GD and PDO-MYSQL
        command: sudo docker-php-ext-install -j$(nproc) iconv  && sudo docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && sudo docker-php-ext-install -j$(nproc) gd && sudo docker-php-ext-enable pdo_mysql
    - run:
        name: Create folder for Circle Artifacts and Circle Test Reports
        working_directory: *removed*
        command: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
    - run:
        name: Download Composer
        command:  curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
    - run:
        name: Running Composer Install
        working_directory: *removed*
        command: composer install --no-interaction;
    - run:
        name: Download Yarn
        working_directory: *removed*
        command: curl -o- -L https://yarnpkg.com/install.sh | bash
    - run:
        name: Install Yarn
        working_directory: *removed*
        command: sudo yarn install
    - restore_cache:
        keys:
        - v1-dep-{{ .Branch }}-
        - v1-dep-pre-production-
        - v1-dep-
    - save_cache:
        key: v1-dep-{{ .Branch }}-{{ epoch }}
        paths:
        - vendor/bundle
        - ~/virtualenvs
        - ~/.m2
        - ~/.ivy2
        - ~/.bundle
        - ~/.go_workspace
        - ~/.gradle
        - ~/.cache/bower
        - ~/.composer/cache
        - ~/.yarn-cache
    - run:
        name: Creating folder for PHPUnit Tests
        working_directory: *removed*
        command: mkdir -p $CIRCLE_TEST_REPORTS/phpunit
    - run:
        name: Running PHPUnit Tests
        working_directory: *removed*
        command: ./vendor/bin/phpunit --configuration ./phpunit.xml.dist --log-junit $CIRCLE_TEST_REPORTS/phpunit/junit.xml
    - store_test_results:
        path: /tmp/circleci-test-results
    - store_artifacts:
        path: /tmp/circleci-artifacts
    - store_artifacts:
        path: /tmp/circleci-test-results
  deployment:
    docker:
      - image: circleci/python:2.7-jessie
    steps:
      - run:
        name: Install awsebcli
        command: sudo pip install awsebcli
      - run:
        name: Deploy to S3
        command: eb deploy --profile default
workflows:
  version: 2
  build_and_test:
    jobs:
      - build:
          filters:
            tags:
              only: /.*/
      - deployment:
          requires:
            - build
          filters:
            branches:
              only: pre-production

感谢您的宝贵时间

【问题讨论】:

    标签: cakephp phpunit circleci circleci-2.0


    【解决方案1】:

    我会按照您在配置中的方式处理数据库。您可以为数据库使用第二个容器。然后使用环境变量设置数据库凭据。

    配置行看起来像这样:

    - image: circleci/mariadb:10.1
        environment:
          MYSQL_DATABASE: "common_resources_test"
          MYSQL_ROOT_PASSWORD: "root"
    

    【讨论】:

    • 需要 2 个容器,这是一项付费服务​​,对吗?我现在正试图避免这种情况
    • 是和不是。从技术上讲,它是两个容器,但 CircleCI 在定价时只计算构建/执行容器。无需付费,在私人项目中,您一次只能运行一项工作。以我为例,这仍然是一份工作。
    【解决方案2】:

    找到了解决此问题的方法。基本上 mysql root 不允许使用密码登录。不得不设置它。这是我的 app.php 配置:

        'test_common_resources' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => '127.0.0.1',
            'unix_socket' => '/var/run/mysqld/mysqld.sock',
            'database' => 'common_resources_test',
            'username' => 'root',
            'password' => 'root',
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'cacheMetadata' => true,
        ]
    

    这是我的 circleci 配置:

    version: 2
    jobs:
      build:
        working_directory: **removed**
        parallelism: 1
        shell: /bin/bash --login
        environment:
          CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
          CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
          DEBUG: true
        docker:
        - image: circleci/php:7.1-node-browsers
        steps:
        - run:
            name: Install Maria DB
            command:  sudo apt-get install -y mariadb-server-10.1 mariadb-server-core-10.1 mariadb-client-10.1 mariadb-client-core-10.1
        - run:
            name: Initializing Mysql
            command: 'sudo service mysql status || sudo service mysql restart; '
        - run:
            name: Set password
            command: sudo mysql -u root -e "USE mysql; UPDATE user SET password=PASSWORD('root') WHERE User='root';FLUSH PRIVILEGES;"
        - run:
            name: Check settings
            command: sudo mysql -u root -proot -e "USE mysql; UPDATE user SET plugin='mysql_native_password' WHERE User='root'; SELECT User, Host, plugin FROM mysql.user WHERE user = 'root';grant all privileges on *.* to root@'127.0.0.1' identified by 'root';FLUSH PRIVILEGES; SELECT host FROM user WHERE user = 'root';SELECT @@port;SELECT @@hostname;"
        - run:
            name: Restarting Mysql
            command: 'sudo service mysql status || sudo service mysql restart; '
        - run:
            name: Create Mysql database and show current databases
            command: sudo mysql -uroot -proot -e "create database common_resources_test;SHOW DATABASES"
        - run:
            name: Install required Libraries for PHP-GD
            command: sudo apt-get update && sudo apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
        - run:
            name: Install PHP Extensions (PHP-GD && PDO-MYSQL)
            command: sudo docker-php-ext-install gd && sudo docker-php-ext-install pdo_mysql
        - run:
            name: Install Other required Libraries for PHP & Activating PHP-GD and PDO-MYSQL
            command: sudo docker-php-ext-install -j$(nproc) iconv  && sudo docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && sudo docker-php-ext-install -j$(nproc) gd && sudo docker-php-ext-enable pdo_mysql
        - run:
            name: Create folder for Circle Artifacts and Circle Test Reports
            command: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
        - run:
            name: Download Composer
            command:  curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
        - run:
            name: Download Yarn
            command: curl -o- -L https://yarnpkg.com/install.sh | bash
        - run:
            name: Install Yarn
            command: sudo yarn install
        - restore_cache:
            keys:
            - v1-dep-{{ .Branch }}-
            - v1-dep-pre-production-
            - v1-dep-
        - checkout
        - run:
            name: Running Composer Install
            command: composer install --no-interaction;
        - save_cache:
            key: v1-dep-{{ .Branch }}-{{ epoch }}
            paths:
            - vendor/bundle
            - ~/virtualenvs
            - ~/.m2
            - ~/.ivy2
            - ~/.bundle
            - ~/.go_workspace
            - ~/.gradle
            - ~/.cache/bower
            - ~/.composer/cache
            - ~/.yarn-cache
        - run:
            name: Creating folder for PHPUnit Tests
            command: mkdir -p $CIRCLE_TEST_REPORTS/phpunit
        - run:
            name: Checking Mysql Status
            command: 'sudo service mysql status'
        - run:
            name: Running PHPUnit Tests
            command: ./vendor/bin/phpunit --configuration ./phpunit.xml.dist --log-junit $CIRCLE_TEST_REPORTS/phpunit/junit.xml
        - store_test_results:
            path: /tmp/circleci-test-results
        - store_artifacts:
            path: /tmp/circleci-artifacts
        - store_artifacts:
            path: /tmp/circleci-test-results
      deployment:
        docker:
          - image: circleci/python:2.7-jessie
        steps:
          - run:
            name: Install awsebcli
            command: sudo pip install awsebcli
          - run:
            name: Deploy to S3
            command: eb deploy --profile default
    workflows:
      version: 2
      build_and_test:
        jobs:
          - build:
              filters:
                tags:
                  only: /.*/
          - deployment:
              requires:
                - build
              filters:
                branches:
                  only: pre-production
    

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 2011-10-16
      • 2011-06-02
      • 2014-02-13
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多