Ошибка действия Github при настройке QEMU - Ошибка: невозможно найти исполняемый файл: докер

Я создаю рабочий процесс для тестирования, создаю образ докера и отправляю его в частный репозиторий GitHub.

Раньше я запускал экшен на ububntu-latest и использовал определенную версию PHP и некоторые сборки среды, но возникли некоторые проблемы из-за того, что он не идентичен производственной сборке.

Я хотел использовать ту же среду, что и производственная среда, поэтому я использовал контейнер, который использует php7.3, и вызвал его после запуска действия на ubuntu-latest

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что после успешного обновления композитора я не могу вызвать образ докера по умолчанию tp build. Я получаю эту ошибку на этапе «Настройка QEMU»

Ошибка: невозможно найти исполняемый файл: docker. Убедитесь, что либо путь к файлу существует, либо файл находится в каталоге, заданном переменной среды PATH. Также проверьте режим файла, чтобы убедиться, что файл является исполняемым.

Вот мое действие

name: Сборка и публикация Docker для разработки

на:
  толкать:
    филиалы: развитие

вакансии:
  строить:
    работает: ubuntu-latest
    контейнер:
      изображение: egahmad / php7.3-laravel-apache-development
# тома:
# - app_files: / var / www / html /

    Сервисы:
      mysql:
        изображение: mysql:5.7
        env:
          MYSQL_DATABASE: db
          MYSQL_USER: пользователь
          MYSQL_PASSWORD: секрет
          MYSQL_ROOT_PASSWORD: секрет
        порты:
          - 3306:3306
        параметры: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    шаги:
      - использует: actions / checkout@v2

      - имя: Проверить соединение TNT MySQL
        запустить: |
          mysql --version
          sudo apt-get install -y по умолчанию-mysql-client
          mysql --host mysql --port ${{job.services.mysql.ports['3306']}} -uuser -psecret -e "ПОКАЗАТЬ БАЗЫ ДАННЫХ"

      - имя: Копировать .env
        запустить: |
          php -r "file_exists('.env') || copy('.env.cicd', '.env');"

      - имя: Установить зависимости
        запустить: установка композитора

      - имя: Сгенерировать ключ
        запустить: php artisan key:generate

      - имя: Разрешения каталога
        запустите: chmod -R 777 bootstrap / cache

      - name: выполнять тесты (модульные и функциональные тесты) через PHPUnit
        env:
          MYSQL_DATABASE: db
          DB_USERNAME: пользователь
          DB_PASSWORD: секрет
          DB_PORT: ${{job.services.mysql.ports[3306]}}
        запустить: vendor / bin / phpunit

      - name: Настроить QEMU
        использует: docker / setup-qemu-action@v1
      - name: настроить Docker Buildx
        использует: docker / setup-buildx-action@v1
      - name: вход в реестр контейнеров GitHub
        использует: docker / login-action@v1
        с участием:
          реестр: ghcr.io
          имя пользователя: ${{github.repository_owner}}
          пароль: ${{secrets.GITHUB_SECRET}}
      - имя: Сборка и толчок
        использует: docker / build-push-action@v2
        с участием:
          контекст:.
          файл: ./Dockerfile
          толчок: правда
          цель: ci
          Теги: ghcr.io/account/image:development
          build-args: |
            GITHUB_USER=${{secrets.GITHUB_USERNAME}}
            GITHUB_PASSWORD=${{secrets.CR_PAT}}.
      - название: Дайджест изображения
        запустить: echo ${{steps.docker_build.outputs.digest}}

1 ответ

В dockerкоманда недоступна, и я не верю, что шаги qemu предназначены для работы в контейнере (они вносят изменения в ядро). Чтобы запустить шаги qemu на ubuntu-latesthost, я считаю, что вам нужно секцию удалитьконтейнера . Если для шагов требуется эта среда, вы можете попробовать разбить задание на несколько заданий, при этом одни шаги выполняются в контейнере, а другие - непосредственно на хосте.

Если вы выполняете все эти шаги в Github Actions, потому что для сборки докера требуются уже созданные двоичные файлы, я бы рекомендовал перейти на многоступенчатую сборку. Первым этапом будет ваш egahmad/php7.3-laravel-apache-development изображение, выполняя шаги, которые вы в настоящее время выполняете в GHA, а затем второй этап будет копировать из этого первого этапа, а не из контекста сборки.