Gitlab-CI : ERROR 2002 (HY000): 无法通过套接字 '/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器

Gitlab-CI : ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock'

错误 2002 (HY000): 无法通过套接字 '/run/mysqld/mysqld.sock' (2)[=29 连接到本地 MySQL 服务器=]

大家好! 我的 gitlab-ci.yml 有点(大)问题 :(

我正在尝试 运行 我在管道上测试 PHPUnit 但是当我想创建一个 mysql 数据库并连接它时,它失败了。

这是我的.gitlab-ci.yml :

image: jakzal/phpqa:php8.0

before_script:
        - composer install
                
stages: 
    - SecurityChecker
    - UnitTests

cache:
  paths:
    - vendor/
    - ~/.composer/cache/files    

#On teste qu'il n'y a pas de faille de sécurité dans les différentes librairies
security-checker:
    stage: SecurityChecker
    script:
        - local-php-security-checker composer.lock
    allow_failure: false

#On lance les tests unitaires PHP UNIT    
phpunit:
    stage: UnitTests
    services:
        - name: mysql:latest
    before_script:
        - apt-get update && apt-get dist-upgrade && apt-get install -y git libzip-dev autoconf build-essential pkg-config libmariadb-dev-compat libmariadb-dev default-mysql-client mariadb-client mariadb-server
        - curl -sSk https://getcomposer.org/installer | php -- --disable-tls && mv composer.phar /usr/local/bin/composer
        - docker-php-ext-install mysqli pdo pdo_mysql zip
        # Connect MySQL
        - echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password');" | mysql -u root
        - echo "SELECT 'OK';" | mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -h mysql "$MYSQL_DATABASE"
        # Import BDD tests
        - mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -h localhost < "database.sql"
    script:
        - vendor/bin/phpunit --testdox
    allow_failure: false

这是结果:

Pipeline error

你对我的问题有什么想法吗? 我现在在不同的论坛上没有找到任何东西...... :sleepy:

非常感谢!

看这里:https://docs.gitlab.com/ee/ci/services/
我能够让它像这样工作:

stages:
  - test

services:
  - mariadb

test:
  stage: test
  image: mariadb
  variables:
    MARIADB_ROOT_PASSWORD: password
    MARIADB_DATABASE: dbname
  script:
    - mysql --user=root --password="$MARIADB_ROOT_PASSWORD" --host=mariadb

您可能需要将 -h localhost 更改为 -h mysql

我的问题的答案就是这段代码! 它对我有用:)

#On lance les tests unitaires PHP UNIT    
phpunit:
    stage: UnitTests
    services:
        - name: mysql:8.0.11
    variables: 
        MYSQL_DATABASE: 'database-name' 
        MYSQL_ROOT_PASSWORD: ''
        MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        DB_USERNAME: 'runner'
        DB_PASSWORD: 'password'
        DB_HOST: 'mysql'  
    before_script:
        # Install packages and docker
        - apt-get update -y && apt-get dist-upgrade -y && apt-get install -y git libzip-dev autoconf curl libmcrypt-dev build-essential pkg-config libmariadb-dev-compat libmariadb-dev default-mysql-client mariadb-client mariadb-server
        - docker-php-ext-install mysqli pdo pdo_mysql zip
        # Config MySQL
        - rm -f /tmp/mysql.sock.lock
        - sleep 10 
        # Import BDD for tests units
        - mysql -u root -h "$DB_HOST" < "web/files/database-test.sql"
        # Check BDD
        - echo "SHOW tables;" | mysql -u root -h "$DB_HOST" -D "$MYSQL_DATABASE"
    script:
        - vendor/bin/phpunit --testdox
    allow_failure: false