Google cloub 构建发生了变化(无缘无故?)

Mar*_*S82 4 google-app-engine google-cloud-platform google-cloud-build

我有一个在应用程序引擎上运行的nodejs 项目。直到昨天为止,这一切都运行良好。我的 package.json 也已上传,因为它包含依赖项和启动脚本。当我部署谷歌云构建时会自动运行。从昨天开始,它还尝试运行“npm run build”。当然这会失败,因为我没有上传任何源文件。

我没有配置这个,我想知道为什么行为会改变。

要上传,我使用 gcloud 命令:

gcloud app deploy --version v1

我的 app.yml 如下所示:

# [START app_yaml]
runtime: nodejs16
instance_class: F1
automatic_scaling:
  max_instances: 1

entrypoint: npm run cloud-start

handlers:
- url: /api/.*
  script: auto
  secure: always

- url: /(.*\.(gif|png|jpg|css|js|json)(|\.map))$
  static_files: dist/www/\1
  upload: dist/www/(.*)(|\.map)
  secure: always
  expiration: "100d 0h"

- url: /|(.*)|index.html
  static_files: dist/www/index.html
  upload: dist/www/index.html
  expiration: "0d 0h"
  secure: always

# [END app_yaml]

Run Code Online (Sandbox Code Playgroud)

.cloudignore:

# Ignore everything
/[!.]*
/.?*

# Except the Cloud Function files we want to deploy
!/package.json
!/package-lock.json
!/dist/**

#!include:.gitignore
Run Code Online (Sandbox Code Playgroud)

Ran*_*pho 5

今天我也被这个问题困扰了,我花了一整天的时间才终于弄清楚。

这 100% 是 Google 对 Nodejs 的 gcloud 应用程序部署脚本的功能更改。

值得庆幸的是,下面有一个简单的解决方法,但首先我想咆哮并给出背景:今天下午,当我部署一个完全微小且不相关的更改时,我收到了一个 buildbreaker。本地一切工作正常,因此我尝试将以前的构建重新部署到开发环境。它也失败了。

经过研究,我发现了和你一样的事情;一个意外的电话npm build。经过更多研究后,我找到了解决方法。

事实证明,谷歌几天前武断地决定build在没有脚本的情况下开始运行“如果存在”package.json作为后备gcp-build。值得庆幸的是,包含一个空白gcp-build脚本package.json解决了这个问题。请参阅下面的示例

我从未收到谷歌云的通知说他们正在这样做。

我和你一样,使用 my 中的 npm 构建脚本预先打包我的构建,然后在抑制原始源文件夹的同时package.json运行。gcloud deploy

我和你一样,没有包含gcp-build脚本,因为我没有特殊的构建需求。

解决方法

添加"gcp-build": ""scripts您的package.json.

例子:

{
    "name": "myapp",
    "main": "mybuild/index.js",
    "scripts": {
      "build": "tsc",
      "start": "node mybuild/index.js",
      "gcp-build": ""
    },
}
Run Code Online (Sandbox Code Playgroud)

gcp-build如果脚本部分中有命令,Google Cloud 将尝试运行该命令,而不是build. 如果它是空白的,它将不会执行任何操作,但最重要的是不会回退到build.

以后的参考

这是当前信息,谷歌很有可能很快就会更改此功能。我将尽力关注事态发展并根据需要进行更新

更新
看起来谷歌也将其推广到了云功能。