繁体   English   中英

PHP CI/CD 运行时出现致命错误 php 工匠测试

[英]PHP Fatal error on CI/CD run php artisan test

我将docker-compose与 laravel 和postgresql一起使用,并且在本地系统中一切正常。 问题出在 CI/CD 中。

我一遍又一遍地更改了 CI/CD yml 文件,但我被卡住了!

持续集成/持续集成

name: CI/CD

on:
  pull_request:
    branches: ['master']
  push:
    branches: ['master']

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
      - uses: actions/checkout@v2

      - name: Run Containers
        run: docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

      # - name: Run composer install
      #   run: cd companyname_app_dir && composer install

      # - name: Run composer update
      #   run: cd companyname_app_dir&& composer update

      # - name: Setup Project
      #   run: |
      #     cd companyname_app_dir
      #     composer update
      #     composer install
      #     php artisan config:clear
      #     php artisan cache:clear

      - name: Run test
        run: cd companyname_app_dir && php artisan test
        env:
          APP_KEY: base64:x06N/IsV5iJ+R6TKlr6sC6Mr4riGgl8Rg09XHHnRZQw=
          APP_ENV: testing
          DB_CONNECTION: companyname-postgres
          DB_DATABASE: db_test
          DB_USERNAME: root
          DB_PASSWORD: 1234

  deploy:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: secret
          password: secret

      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          push: true
          file: ./companyname_app_dir/Dockerfile
          tags: company_image:latest
          build-args: |
            "NODE_ENV=production"

有行注释,我尝试使用这些但无法成功运行测试。

docker-compose

version: '3'

networks:
  companyname_network:
    driver: bridge

services:
  nginx:
    image: nginx:stable-alpine
    container_name: companyname-nginx
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    restart: always
    depends_on:
      - companyname_app
    networks:
      - companyname_network

  companyname_app:
    restart: 'always'
    image: 'companyname_laravel'
    container_name: companyname-app
    build:
      context: .
      dockerfile: ./Dockerfile
    networks:
      - companyname_network
    depends_on:
      - companyname_db

  companyname_db:
    image: 'companyname_multiple_db'
    container_name: companyname-postgres
    build:
      context: .
      dockerfile: ./DockerfileDB
    restart: 'always'
    volumes:
      - local_pgdata:/docker-entrypoint-initdb.d
    environment:
      - POSTGRES_MULTIPLE_DATABASES=db,db_test
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=1234
    ports:
      - 15432:5432
    networks:
      - companyname_network

  companyname_dbadmin:
    image: adminer
    container_name: companyname-dbadmin
    restart: 'always'
    depends_on:
      - companyname_db
    ports:
      - 5051:8080
    networks:
      - companyname_network

volumes:
  local_pgdata:

docker-compose.dev

version: '3'

services:
  nginx:
    ports:
      - 9000:80

  companyname_app:
    build: 
      args:
        - NODE_ENV=development
    volumes:
      - ./companyname_app_dir:/app
      - /app/vendor

有了这个文件,我得到一个错误:

运行 cd companyname_app_dir && php 工匠测试
PHP 警告:要求(/home/runner/work/companyname_app/companyname_app /companyname_app_dir/vendor/autoload.php):无法打开 stream:/home/runner/work/companyname_app/companyname_app/companyname_app_dir/artisan 中没有这样的文件或目录18号线
PHP 致命错误:require():无法打开 /home/runner 中需要的 '/home/runner/work/companyname_app/companyname_app/companyname_app_dir/vendor/autoload.php' (include_path='.:/usr/share/php') /work/companyname_app/companyname_app/companyname_app_dir/artisan 第 18 行
错误:进程已完成,退出代码为 255。

如果我使用:

- name: Run composer install
  run: cd companyname_app_dir && composer install

- name: Run composer update
  run: cd companyname_app_dir && composer update

在 CI/CD yml 和 remove Run Containers部分, composer installupdate成功,但是php artisan test抛出这个错误:

postgresql 连接不上

  1. 您必须使用composer install ,否则您将根本没有vendor文件夹,因此您无法运行任何东西。 这就是为什么如果你不运行composer install你会得到一个错误
  2. 你不应该运行composer update ,因为你正在将包更新到新版本,你永远不会在生产中这样做,你只需要运行composer install --no-dev
  3. 您正在混合运行 docker 和 docker 容器外的命令。

与第3.点相关,如果你使用的是docker-compose ,则无法执行:

- name: Run test
  run: cd companyname_app_dir && php artisan test
  env:
    APP_KEY: base64:x06N/IsV5iJ+R6TKlr6sC6Mr4riGgl8Rg09XHHnRZQw=
    APP_ENV: testing
    DB_CONNECTION: companyname-postgres
    DB_DATABASE: db_test
    DB_USERNAME: root
    DB_PASSWORD: 1234

因为你在docker之外,所以你应该执行docker-compose exec companyname_app php artisan test ,这将在 docker 容器内执行测试,在那里你正确地设置了所有内容。

所以你的代码(如果我没有遗漏任何东西)应该是:

- name: Run test
  run: docker-compose exec companyname_app php artisan test
  env:
    APP_KEY: base64:x06N/IsV5iJ+R6TKlr6sC6Mr4riGgl8Rg09XHHnRZQw=
    APP_ENV: testing
    DB_CONNECTION: companyname-postgres
    DB_DATABASE: db_test
    DB_USERNAME: root
    DB_PASSWORD: 1234

但我不确定你会从那个执行中得到什么,我不知道如果测试失败,如果 CI/CD(我假设你正在使用 GitHub 操作或 Bitbucket 管道),将真正确定它已经失败或不是。


我通常做的是在机器(CI/CD 机器)上安装所有东西,而不是使用 docker 文件或 docker-compose yaml。但这是我的偏好(至少对于 PHP/Laravel)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM