Я пытаюсь развернуть новое приложение в App Engine (стандартная среда). Это приложение Laravel 11, PHP 8.3, которое я развертываю с помощью действий GitHub.
Проблема в том, что он успешно загружен в Google Cloud, но Cloud Build не определяет, что он должен работать composer install. Я проверил журналы сборки и увидел это:
На этапе сборки мое предыдущее приложение (Laravel 9, PHP 8.2) всегда запускает детектор, который обнаруживает, что необходимо запустить композитор:
===> DETECTING
Timer: Detector started at 2024-05-27T00:01:25Z
5 of 6 buildpacks participating
google.php.runtime 0.0.2
google.php.composer-install 0.0.1
google.php.composer 0.9.1
google.php.appengine 0.9.0
google.utils.label-image 0.0.2
Timer: Detector ran for 179.182403ms and ended at 2024-05-27T00:01:25Z
Теперь мой Laravel 11, PHP 8.3 на этапе сборки имеет только это:
===> DETECTING
Timer: Detector started at 2024-05-26T21:41:32Z
3 of 6 buildpacks participating
google.php.runtime 0.0.2
google.php.appengine 0.9.0
google.utils.label-image 0.0.2
Timer: Detector ran for 175.726391ms and ended at 2024-05-26T21:41:32Z
Теперь, согласно Cloud Docs, Composer запускается автоматически, если вам требуется autoload.php (что справедливо для приложений Laravel в public/index.php).
Для контекста, это мой .github/workflows/v2.yml:
name: V2 Deployment
on:
push:
branches:
- v2
jobs:
build:
name: 📦 Build the App
runs-on: ubuntu-latest
steps:
- name: 💾 Get the latest code
uses: actions/checkout@v4
- name: 🧩 Build the frontend
run: |
npm install
npm run build
- name: 📤 Upload frontend
uses: actions/upload-artifact@v4
with:
name: frontend
path: public/build
deploy_staging:
name: 🦺 Deploy to staging (v2)
runs-on: ubuntu-latest
environment: staging
needs: build
permissions:
id-token: write
contents: read
steps:
- name: 💾 Get the latest code
uses: actions/checkout@v4
- name: 📥 Download frontend
uses: actions/download-artifact@v4
with:
name: frontend
path: public/build
- name: 🔑 Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
workload_identity_provider: ${{ vars.GCLOUD_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ vars.GCLOUD_SERVICE_ACCOUNT }}
- name: 🚀 Deploy to App Engine
uses: google-github-actions/deploy-appengine@v2
with:
project_id: ${{ vars.GCLOUD_PROJECT }}
version: v2
deliverables: .github/workflows/appengine/staging.yaml
gcloud_component: beta
flags: --no-cache
А это мой .github/workflows/appengine/staging.yaml:
runtime: php83
env: standard
service: staging
handlers:
- url: /(.*\.(bmp|gif|png|jpg|jpeg|png|ico))$
static_files: public/\1
upload: public/.*\.(bmp|gif|png|jpg|jpeg|png|ico)$
- url: /(.*\.ico)$
static_files: public/\1
upload: public/.*\.icon$
- url: /(.*\.mp4)$
mime_type: video/mp4
static_files: public/\1
upload: public/.*\.mp4$
- url: /(.*\.css)$
mime_type: text/css
static_files: public/\1
upload: public/.*\.css$
- url: /(.*\.js)$
mime_type: application/javascript
static_files: public/\1
upload: public/.*\.js$
- url: /(.*\.json)$
mime_type: application/json
static_files: public/\1
upload: public/.*\.json$
- url: /(.*\.(svg|svgz))$
mime_type: image/svg+xml
static_files: public/\1
upload: public/.*\.(svg|svgz)$
- url: /(.*\.txt)$
mime_type: text/plain
static_files: public/\1
upload: public/.*\.txt$
- url: /(.*\.ttf)$
mime_type: font/ttf
static_files: public/\1
upload: public/.*\.ttf$
- url: /(.*\.woff2)$
mime_type: font/woff2
static_files: public/\1
upload: public/.*\.woff2$
- url: /(.*\.map)$
mime_type: application/json
static_files: public/\1
upload: public/.*\.map$
env_variables:
VIEW_COMPILED_PATH: /tmp
CACHE_STORAGE_PATH: /tmp/framework/cache/data
(примечание: service: staging в staging.yaml действителен, поскольку я развернул V1 с действительным dispatch.yaml).






Что ж, бритва Оккама никогда не перестает меня впечатлять. Проблема в том, что мой v2.yml не находится в корневом каталоге приложения. Я думал, что это не будет проблемой, потому что я попытался установить working_directory: ./ (см. входные данные действия ). Но это...
Итак, для разработчиков, которые одержимо пытаются привести в порядок свою кодовую базу, вот недостающий шаг, который я добавил перед 🚀 Deploy to App Engine:
- name: 📑 Move the GAE deliverables
run: |
mv .github/workflows/appengine/staging.yaml app.yaml
mv .github/workflows/appengine/dispatch.yaml dispatch.yaml
а затем измените путь к результатам:
- name: 🚀 Deploy to App Engine
uses: google-github-actions/deploy-appengine@v2
with:
project_id: ${{ vars.GCLOUD_PROJECT }}
version: v2
deliverables: app.yaml dispatch.yaml
PS: Это создало еще одну проблему с Cloud Composer:
Problem 1
Step #2 - "build": - laravel/framework is locked to version v11.0.5 and an update of this package was not requested.
Step #2 - "build": - laravel/framework v11.0.5 requires composer-runtime-api ^2.2 -> found composer-runtime-api[2.1.0] but it does not match the constraint.
...поэтому мне также пришлось добавить это на шаг развертывания:
build_env_vars:
GOOGLE_COMPOSER_VERSION=2.2.1