PDOException:SQLSTATE [HY000] [2054]服务器请求的客户端未知的身份验证方法(Bitbucket管道)

时间:2018-05-16 00:30:45

标签: sql laravel phpunit bitbucket

我正在运行bitbucket管道来使用PHP Unit执行所有单元测试。当我在本地执行测试时,所有这些都通过。但是在bitbucket管道上总是会失败。在这种情况下,测试与我们正在检查的外部服务有关。

<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

use MyService;

class MyTest extends TestCase
{
    /**
     * Test the dummies in this new system
     *
     * @return void
     */
    public function testDumies()
    {
        $games = DummyService::getDummies();
        $this->assertTrue(count($dummies) > 0);
    }

    public function testDummiesOfUser()
    {
        $dummies = DummyService::getDummiesOfUser('someemail@mail.com');
        $this->assertTrue(count($dummies) > 0);
    }
}

以下是获取假人的服务

<?php
namespace App\Services;

class DummyService {

    /**
     * Get dummies
     *
     * @return void
     */
    public function getDummies() {
        $collection = [];

        $games = $this->getDummiesInUrl('http://my-project/api/v1/platform/dummies');
        foreach($dummies as $dummy) {
            $collection[] = $dummy;
        }

        return $collection;
    }

    /**
     * Retrieves the dummies in url
     *
     * @param string $endpoint
     * @return array
     */
    public function getDummiesInUrl($endpoint) {
        $client = new \GuzzleHttp\Client();
        $res = $client->request('GET', $endpoint);
        $body = $res->getBody();
        $body = json_decode($body, true);
        $data = $body['data'];
        $dummies = $data['dummies'];
        return $dummies;
    }

    /**
     * Returns the dummies of an user
     *
     * @param string $email
     * @return array
     */
    public function getDummiesOfUser($email) {
        $collection = [];
        $dummies = $this->getDummiesOfUserInUrl('http://myroute/api/v1/platform/dummies/user', $email);
        foreach($dummies as $d) {
            $collection[] = $d;
        }
        return $collection;
    }

    /**
     * Get gameplays in url
     *
     * @param string $endpoint
     * @param string $email
     * @return array
     */
    public function getDummiesOfUserInUrl($endpoint, $email) {
        $client = new \GuzzleHttp\Client();
        $res = $client->request('GET', $endpoint, ['query' => ['email' => $email]]);
        $body = $res->getBody();
        $body = json_decode($body, true);
        $data = $body['data'];
        $dummies = $data['dummiess'];
        return $dummies;
    }
}

但是当在bitbucket管道上测试时,我遇到了以下错误:

PDOException: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the clientCaused by PDOException:PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]

1 个答案:

答案 0 :(得分:0)

显然,对于mysql 8的新公共版本,很多东西都发生了变化。因此,为了继续使用您的管道,我编辑了我的bitbucket-pipelines.yml并将mysql映像版本从mysql更改为mysql:5.7.22

definitions:
  services:
    mysql:
      image: mysql:5.7.22
      environment:
        MYSQL_DATABASE: 'homestead'
        MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
        MYSQL_USER: 'homestead'
        MYSQL_PASSWORD: 'secret'