如何将私有、自托管的 NPM 包与 Google App Engine 节点、标准环境一起使用

Posted

技术标签:

【中文标题】如何将私有、自托管的 NPM 包与 Google App Engine 节点、标准环境一起使用【英文标题】:How to use private, self hosted NPM package with Google App Engine node, standard environment 【发布时间】:2019-08-16 03:54:11 【问题描述】:

我有一个 NPM 包托管在私有 Bitbucket git 存储库中(不在官方 NPM 注册表中)。

我的 package.json 中有这个,在“依赖项”键下:

"a-private-package" git+ssh://git@bitbucket.org:myusername/a-private-package.git

当我使用我的 SSH 密钥在本地运行 npm install 时,它可以工作。

但是当我使用gcloud app deploy 部署到节点的应用引擎标准环境时,我从 Google Cloud Build 获得了一个Host key verification failed

我试过了:

向 Cloud Build 添加自定义 SSH 密钥。

https://cloud.google.com/cloud-build/docs/access-private-github-repos

问题:对于 GAE 标准,无法访问 cloudbuild.yaml;无法告诉 git 使用 SSH 密钥。

将我的私人 git 存储库添加到 Google Sources。

问题:GAE 标准无法访问cloudbuild.yaml;无法告诉 git 使用 SSH 密钥。

npm pack; npm install

问题:不保留回购历史/URL。

真的可以吗?

【问题讨论】:

你看过这个Article吗?它提到了使用 GAE 标准的 cloudbuild.yaml 并将 Bitbucket 链接到它。 我没有,但会看看。我认为它不会像示例从构建中调用 gcloud app deploy 那样工作,这将启动另一个新构建,而在它之前的层中没有安装 SSH 密钥? 好吧,这篇文章在他定义cloudbuild.yaml之后运行gcloud app deploy。我看到您从 Cloud Build 获得了 Host key verification failed 错误并将 SSH 密钥添加到 .yaml 文件可以解决此问题,但您还说您无法修改 cloudbuild.yaml。为什么不能修改cloudbuild.yaml gcloud app deploy 将触发一个新的新构建(从第一个构建开始),cloudbuild.yaml 为空。我认为这是核心问题(您无法自定义gcloud app deploy 使用的cloudbuild.yaml)。如果您查看那篇文章的 cmets,其他人也有同样的问题。不过感谢您的链接。 @zino 你有没有找到解决办法? 【参考方案1】:

不幸的是,您需要在 package.json 中嵌入用户名/密码,但您可能可以使用 https 端点:

"a-private-package": "git+https://myusername:password@bitbucket.org/myusername/a-private-package.git"

如果这对您有用,我建议您在 bitbucket 上创建一个单独的帐户,并将其限制为仅在该 repo 上查看。

【讨论】:

【参考方案2】:

在运行gcloud app deploy 时无法修改cloudbuild.yaml。相反,您必须创建一个新的cloudbuild.yaml 并使用gcloud builds submit --config=cloudbuild.yaml . 执行它。在这种情况下,gcloud app deploy 将在cloudbuild.yaml 中执行。

我已经尝试了连接到私有 Github 存储库并更改值以使其适合 bitbucket 的步骤,但无法做到。因此,我创建了这个Feature Request for better documentation


使用云源代码库

我相信,由于您已经依赖于私有存储库,因此在其上托管整个应用程序会更简单。鉴于此,您将不得不克隆整个 repo,运行 npm install 和 deploy。

在这种情况下,Cloud Source Repositories 具有 mirror directly 到 Bitbucket(公共和私有存储库)的内置功能。

Steps:

1) 使用以下代码在您的应用根文件夹上创建cloudbuild.yaml

steps:
# NPM install
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
#Test
- name: 'gcr.io/cloud-builders/npm'
  args: ['test']
#Deploy
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy"]

2)Connect Cloud Source Repositories to Bitbucket

3) 创建Cloud Build Trigger(这样推送到repo的新代码会自动部署)

4) 将包含app.yamlcloudbuild.yaml 的根文件夹推送到repo

它现在应该已同步到 Cloud Source Repositories,并且应该触发 Cloud Build 进行部署。

【讨论】:

以上是关于如何将私有、自托管的 NPM 包与 Google App Engine 节点、标准环境一起使用的主要内容,如果未能解决你的问题,请参考以下文章

您可以为您的组织托管一个私有存储库以与 npm 一起使用吗?

带你了解Node.js包管理工具:包与NPM

Angular 项目的自托管材料图标版本 4

Node.js:如何创建付费节点模块?

如何将 gitlab 合并请求用作 npm 模块

Node.js 和 npm phoenix-client 包与 kerberized Apache phoenix 的连接