来自 Cloud Build 的 运行 php artisan 命令
Run php artisan commands from Cloud Build
我正在使用 Cloud Build 在云上部署我的应用程序 运行。我想在 cloudbuild.yaml 中将 php artisan
命令设置为 运行 迁移,初始化护照库...但是我在 Laravel 初始化步骤中遇到了这个错误:
Starting Step #3 - "Laravel Init"
Step #3 - "Laravel Init": Already have image (with digest): gcr.io/cloud-builders/gcloud
Step #3 - "Laravel Init": bash: php: command not found
Step #3 - "Laravel Init": bash: line 1: php: command not found
Step #3 - "Laravel Init": bash: line 2: php: command not found
Step #3 - "Laravel Init": bash: line 3: php: command not found
Step #3 - "Laravel Init": bash: line 4: php: command not found
Finished Step #3 - "Laravel Init"
ERROR
ERROR: build step 3 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 127
这是我的 cloudbuild.yaml
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args:
...
id: Build
# Push the container image to Artifacts Registry
- name: 'gcr.io/cloud-builders/docker'
...
id: Push
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
id: Deploy
entrypoint: gcloud
...
# Laravel Init
- name: 'gcr.io/cloud-builders/gcloud'
id: Laravel Init
entrypoint: "bash"
args:
- "-c"
- |
php artisan migrate --force
php artisan db:seed --force
php artisan db:seed --class=Database\Seeders\UsersTableSeeder --force
php artisan passport:install
images:
- 'europe-west3-docker.pkg.dev/$PROJECT_ID/.....'
tags:
- latest
如何执行我的 php artisan 命令?
根据此输出 php: command not found
,您的云环境中似乎没有安装 PHP
我找到了解决办法。我使用了助手 exec-wrapper。有了这个助手,我可以使用我的 laravel 容器环境并使用嵌入式云 sql 代理连接到云 SQL。所以我只需要传递我之前在 cloudbuild.yaml
的第一步中构建的最新当前图像。我设置了数据库套接字连接,然后传递 migration.sh
文件,我可以在其中 运行 所有 php artisan
命令。
我正在使用 mysql,因此如果您使用的是另一个数据库,则必须调整端口和连接名称。
cloudbuild.yaml:
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args:
...
id: Build
# Push the container image to Artifacts Registry
- name: 'gcr.io/cloud-builders/docker'
...
id: Push
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
id: Deploy
entrypoint: gcloud
...
# Laravel Init
- name: 'gcr.io/google-appengine/exec-wrapper'
id: Laravel Init
args: [
'-i', '<YOUR_IMAGE_URL>',
'-e', 'DB_CONNECTION=mysql',
'-e', 'DB_SOCKET=/cloudsql/<YOUR_CLOUD_SQL_INSTANCE>',
'-e', 'DB_PORT=3306',
'-e', 'DB_DATABASE=<YOUR_DATABASE_NAME>',
'-e', 'DB_USERNAME=<YOUR_DB_USER>',
'-e', 'DB_PASSWORD=<YOUR_DB_PASS>',
'-s', '<YOUR_CLOUD_SQL_INSTANCE>',
'--', '/app/scripts/migration.sh'
]
images:
- 'europe-west3-docker.pkg.dev/$PROJECT_ID/.....'
关注 /app/scripts/migration.sh
中的 /app
文件夹。 /app
是我在 Dockerfile
中设置的 WORKDIR
migration.sh 看起来像这样:
#!/bin/bash
php artisan migrate --force
php artisan db:seed --force
#... add more commands
不要忘记在 IAM 部分中将权限 Client Cloud SQL
添加到 Cloud Build 服务,否则 Cloud Build 无法连接到您的 Cloud SQL 实例。
并关心您的图像是否有入口点文件。您必须使用 exec $@
从 App Engine exec 包装器执行 --
命令。如果你不使用它,命令将被忽略。
我正在使用 Cloud Build 在云上部署我的应用程序 运行。我想在 cloudbuild.yaml 中将 php artisan
命令设置为 运行 迁移,初始化护照库...但是我在 Laravel 初始化步骤中遇到了这个错误:
Starting Step #3 - "Laravel Init"
Step #3 - "Laravel Init": Already have image (with digest): gcr.io/cloud-builders/gcloud
Step #3 - "Laravel Init": bash: php: command not found
Step #3 - "Laravel Init": bash: line 1: php: command not found
Step #3 - "Laravel Init": bash: line 2: php: command not found
Step #3 - "Laravel Init": bash: line 3: php: command not found
Step #3 - "Laravel Init": bash: line 4: php: command not found
Finished Step #3 - "Laravel Init"
ERROR
ERROR: build step 3 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 127
这是我的 cloudbuild.yaml
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args:
...
id: Build
# Push the container image to Artifacts Registry
- name: 'gcr.io/cloud-builders/docker'
...
id: Push
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
id: Deploy
entrypoint: gcloud
...
# Laravel Init
- name: 'gcr.io/cloud-builders/gcloud'
id: Laravel Init
entrypoint: "bash"
args:
- "-c"
- |
php artisan migrate --force
php artisan db:seed --force
php artisan db:seed --class=Database\Seeders\UsersTableSeeder --force
php artisan passport:install
images:
- 'europe-west3-docker.pkg.dev/$PROJECT_ID/.....'
tags:
- latest
如何执行我的 php artisan 命令?
根据此输出 php: command not found
,您的云环境中似乎没有安装 PHP
我找到了解决办法。我使用了助手 exec-wrapper。有了这个助手,我可以使用我的 laravel 容器环境并使用嵌入式云 sql 代理连接到云 SQL。所以我只需要传递我之前在 cloudbuild.yaml
的第一步中构建的最新当前图像。我设置了数据库套接字连接,然后传递 migration.sh
文件,我可以在其中 运行 所有 php artisan
命令。
我正在使用 mysql,因此如果您使用的是另一个数据库,则必须调整端口和连接名称。
cloudbuild.yaml:
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args:
...
id: Build
# Push the container image to Artifacts Registry
- name: 'gcr.io/cloud-builders/docker'
...
id: Push
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
id: Deploy
entrypoint: gcloud
...
# Laravel Init
- name: 'gcr.io/google-appengine/exec-wrapper'
id: Laravel Init
args: [
'-i', '<YOUR_IMAGE_URL>',
'-e', 'DB_CONNECTION=mysql',
'-e', 'DB_SOCKET=/cloudsql/<YOUR_CLOUD_SQL_INSTANCE>',
'-e', 'DB_PORT=3306',
'-e', 'DB_DATABASE=<YOUR_DATABASE_NAME>',
'-e', 'DB_USERNAME=<YOUR_DB_USER>',
'-e', 'DB_PASSWORD=<YOUR_DB_PASS>',
'-s', '<YOUR_CLOUD_SQL_INSTANCE>',
'--', '/app/scripts/migration.sh'
]
images:
- 'europe-west3-docker.pkg.dev/$PROJECT_ID/.....'
关注 /app/scripts/migration.sh
中的 /app
文件夹。 /app
是我在 Dockerfile
WORKDIR
migration.sh 看起来像这样:
#!/bin/bash
php artisan migrate --force
php artisan db:seed --force
#... add more commands
不要忘记在 IAM 部分中将权限 Client Cloud SQL
添加到 Cloud Build 服务,否则 Cloud Build 无法连接到您的 Cloud SQL 实例。
并关心您的图像是否有入口点文件。您必须使用 exec $@
从 App Engine exec 包装器执行 --
命令。如果你不使用它,命令将被忽略。