从Google Cloud Source Control自动部署Google Cloud Functions

时间:2017-12-04 23:00:29

标签: github google-cloud-platform google-cloud-functions google-cloud-source-repos

我无法弄清楚如何从Cloud Source Control或GitHub直接自动部署新推出的云功能提交。我通过创建另一个函数和GitHub webhook找到了类似的解决方案,但由于函数不能SSH(并且安装了SSH密钥),它只能使用Public Repos。 (https://cloud.google.com/community/tutorials/cloud-functions-github-auto-deployer

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

2 个答案:

答案 0 :(得分:4)

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

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

干杯, Philmod

答案 1 :(得分:3)

我设法找到了解决此问题的合理方法。我希望这有助于其他人在同样的问题上挣扎。

必需的设置

在开始执行这些步骤之前,您需要在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,但如果您愿意,这同样适用于npm和GitHub。

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_secret文件的dependencies部分中只有package.json的一个新条目,看起来像这样:

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

以下是发生的事情:

  1. 您正在通过git+ssh在有权访问的系统上将私人仓库作为包安装。
  2. 您正在将其从node_modules/目录重新打包为tarball文件(.tgz)。
  3. 您正在使用file:
  4. 从本地tarball文件安装相同的软件包
  5. 由于软件包名称相同,因此它会将git+ssh条目中的package.json条目替换为file:条目。
  6. 现在,您的云功能部署应该没有任何问题,并且包含您的私有软件包。祝你好运,如果你对这些指示有任何问题,请告诉我 - 我很乐意纠正任何错误并重写任何不明确的内容。

    替代方法

    如果您不介意额外的努力或私人仓库的变化不足以证明CI / CD中的额外复杂性,您也可以使用npm pack / yarn pack来创建tarball文件,运行上面列出的yarn add file:...命令来修改你的package.json,只需将tarball文件检入你的仓库。

    注意:请注意,如果您检查tarball文件的repo是公开的,那么您的私人仓库/包的来源也将公开。

    参考文献: