0

我正在构建一个工作流来测试、构建一个 docker 映像并将其推送到 GitHub 私有存储库。

我曾经在 ububntu-latest 上运行该操作并使用特定的 PHP 版本和一些环境构建,但由于它与生产构建不同,因此存在一些问题。

我想使用与生产相同的环境,所以我使用了一个使用 php7.3 的容器,我在 ubuntu-latest 上运行操作后调用了它

我现在面临的问题是在成功更新作曲家后,我无法调用默认步骤 tp build docker image。我在“设置 QEMU”步骤中收到此错误

错误:无法找到可执行文件:docker。请验证文件路径是否存在,或者该文件是否可以在 PATH 环境变量指定的目录中找到。还要检查文件模式以验证文件是否可执行。

这是我的行动

名称:构建和发布 Docker 以进行开发

上:
  推:
    分支:发展

工作:
  建造:
    运行:ubuntu-latest
    容器:
      图片:egahmad/php7.3-laravel-apache-development
# 卷:
# - app_files:/var/www/html/

    服务:
      mysql:
        图片:mysql:5.7
        环境:
          MYSQL_DATABASE:分贝
          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 --版本
          sudo apt-get install -y default-mysql-client
          mysql --host mysql --port ${{ job.services.mysql.ports['3306'] }} -uuser -psecret -e "显示数据库"

      - 名称:复制 .env
        运行:|
          php -r "file_exists('.env') || 复制('.env.cicd', '.env');"

      - 名称:安装依赖项
        运行:作曲家安装

      - 名称:生成密钥
        运行:php artisan key:generate

      - 名称:目录权限
        运行:chmod -R 777 存储引导/缓存

      - 名称:通过 PHPUnit 执行测试(单元和功能测试)
        环境:
          MYSQL_DATABASE:分贝
          DB_USERNAME:用户
          DB_PASSWORD:秘密
          DB_PORT: ${{ job.services.mysql.ports[3306] }}
        运行:供应商/bin/phpunit

      - 名称:设置 QEMU
        用途:docker/setup-qemu-action@v1
      - 名称:设置 Docker Buildx
        用途:docker/setup-buildx-action@v1
      - 名称:登录 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
          构建参数:|
            GITHUB_USER=${{ 秘密.GITHUB_USERNAME }}
            GITHUB_PASSWORD=${{ 秘密.CR_PAT }}
      - 名称:图像摘要
        运行: echo ${{ steps.docker_build.outputs.digest }}
4

1 回答 1

0

docker命令在 上不可用egahmad/php7.3-laravel-apache-development,并且我不相信 qemu 步骤旨在在容器内运行(它们正在对内核进行更改)。要在主机上运行 qemu 步骤ubuntu-latest,我相信您需要删除容器部分。如果步骤需要此环境,您可以尝试将作业分解为多个作业,其中一些步骤在容器中运行,而其他步骤直接在主机上运行。

如果您在 Github Actions 中完成所有这些步骤,因为您的 docker 构建需要已经创建的二进制文件,我建议您迁移到多阶段构建。第一阶段将是您的egahmad/php7.3-laravel-apache-development映像,运行您当前在 GHA 中执行的步骤,然后第二阶段将从第一阶段而不是构建上下文复制。

于 2021-06-03T21:03:51.140 回答