6

我不知道如何从 Cloud Source Control 或直接从 GitHub 自动部署新推送的 Cloud Functions 提交。我通过创建另一个函数和 GitHub webhook 找到了类似的解决方案,但由于 Functions 不能 SSH(并且安装了 SSH 密钥),它只适用于公共存储库。(https://cloud.google.com/community/tutorials/cloud-functions-github-auto-deployer

任何想法如何实现这一目标?谢谢

4

2 回答 2

7

您可以使用 Google Cloud Builder 来实现此目标。在您的代码库上创建一个触发器,触发的构建将新代码部署到 Google Cloud Function。

我做了一个简单的例子:https ://github.com/Philmod/auto-deploy-gcf

干杯,菲尔莫德

于 2017-12-11T16:51:44.030 回答
5

我设法为这个问题找到了一个合理的解决方法。我希望它可以帮助其他人在同样的问题上挣扎。

所需设置

在开始执行这些步骤之前,您需要在 CI/CD 系统上设置 SSH 密钥。这就是授予您的构建系统 ssh 访问您的私人仓库的原因。这里有几篇文章讨论如何做到这一点。

您还需要通过安装包,git+ssh以便它包含在您的package.json(和可选的yarn.lock)中。

yarn add git+ssh://git@gitlab.com:erichiggins/top_secret.git

此时,您应该在 中看到以下条目package.json

...
"dependencies": {
  "top_secret": "git+ssh://git@gitlab.com:erichiggins/top_secret.git"
},
...

安装包(两次)

以下是我在部署阶段之前在 CI/CD 设置的 shell 脚本中运行的命令,以便使用git+ssh. 我将top_secret在我的示例中使用一个虚假的包名称,以使其更清楚。

yarn在这个例子中使用了和 GitLab,但如果你愿意,这同样适用于npmGitHub。

yarn install
cd node_modules/top_secret
yarn pack
mv top_secret-v*.tgz ../../
cd ../../
yarn add file:top_secret-v1.0.0.tgz

注意:yarn pack命令将生成一个包含版本号的文件名,但不能yarn add使用通配符 ( *)。我在使用yarn pack --filename通用的、无版本的文件名时遇到了问题,因此您可能需要对此进行硬编码或找到使用由yarn pack.

结果

如果您尝试在本地运行这两个命令,您会注意到您最终在文件top_secretdependencies部分中只有一个新条目package.json,如下所示:

"top_secret": "file:node_modules/top_secret",

这是正在发生的事情:

  1. git+ssh您正在通过具有访问权限的系统将私有存储库作为一个包安装。
  2. 您正在将其从您的node_modules/目录重新打包到一个 tarball 文件 (.tgz) 中。
  3. 您正在使用从本地 tarball 文件安装相同的包file:
  4. 因为包名是相同的,所以它用条目替换git+sshpackage.json条目file:

您对 Cloud Functions 的部署现在应该可以顺利进行,并且包含您的私有包。祝你好运,如果您对这些说明有任何疑问,请告诉我——我很乐意纠正任何错误并重写任何不清楚的地方。

替代方法

如果您不介意额外的工作或私有 repo 的更改频率不足以证明 CI/CD 中的额外复杂性是合理的,您还可以使用npm pack/yarn pack创建一个 tarball 文件,运行yarn add file:...上面列出的相同命令来修改您的package.json和只需将 tarball 文件检查到您的存储库中即可。

注意:请注意,如果您将 tarball 文件签入的存储库是公开的,那么您的私有存储库/包的来源也将公开。

参考:

于 2018-02-01T17:54:15.180 回答