Laravel 项目 bitbucket 管道使用 .env.testing 而不是 .env.pipeline

问题描述 投票:0回答:0

我在我的 laravel 项目中采用了 bitbucket 的 CI/CD 管道。 Laravel 版本 8*.

根据bitbucket文档和社区示例,我在repo中添加了一个.env.pipeline文件。这是 yml 文件中的片段:

pipelines:
  branches:
    develop:
      - step:
          name: Build and push the image
          caches:
            - composer
          script:
            - apk update && apk add mysql-client
            - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
            - composer install --no-progress --prefer-dist --optimize-autoloader
            - cp .env.pipeline .env
            - php artisan key:generate
            - php artisan config:clear
            - php artisan migrate
            - ./vendor/bin/phpunit
          services:
            - mysql

该存储库还有一个

.env.testing
文件以及一个
phpunit.xml
文件。这是 phpunit.xml 文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
         bootstrap="vendor/autoload.php"
         colors="true"
>
    <coverage processUncoveredFiles="true">
        <include>
            <directory suffix=".php">./app</directory>
        </include>
        <report>
            <clover outputFile="build/logs/clover.xml"/>
            <html outputDirectory="build/coverage"/>
        </report>
    </coverage>
    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>
        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>
    </testsuites>
    <coverage processUncoveredFiles="true">
        <include>
            <directory suffix=".php">./app</directory>
        </include>
    </coverage>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="APP_URL" value="http://localhost"/>
        <env name="BCRYPT_ROUNDS" value="4"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="DB_DATABASE" value="testing"/>
        <env name="MAIL_MAILER" value="array"/>
        <env name="QUEUE_CONNECTION" value="sync"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="TELESCOPE_ENABLED" value="false"/>
    </php>
</phpunit>

单元测试在本地运行并通过。但在管道中,该过程失败,抱怨 mysql 主机无法解决。经过故障排除后,我发现

DB_HOST
值的值不是 .env.pipeline 文件中设置的值,而是从 .env.testing 文件中获取的值。这就是为什么管道进程无法解析mysql主机的原因。

我不明白的是,对于管道中的单元测试,如果在还存在

.env.pipeline
文件时不会使用该文件,那么拥有
.env.testing
文件有什么意义。

我该如何处理这种情况?

laravel bitbucket-pipelines
© www.soinside.com 2019 - 2024. All rights reserved.