我无法弄清楚如何从Cloud Source Control或GitHub直接自动部署新推出的云功能提交。我通过创建另一个函数和GitHub webhook找到了类似的解决方案,但由于函数不能SSH(并且安装了SSH密钥),它只能使用Public Repos。 (https://cloud.google.com/community/tutorials/cloud-functions-github-auto-deployer)
任何想法如何实现这一目标?感谢
答案 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",
以下是发生的事情:
git+ssh
在有权访问的系统上将私人仓库作为包安装。node_modules/
目录重新打包为tarball文件(.tgz)。file:
git+ssh
条目中的package.json
条目替换为file:
条目。现在,您的云功能部署应该没有任何问题,并且包含您的私有软件包。祝你好运,如果你对这些指示有任何问题,请告诉我 - 我很乐意纠正任何错误并重写任何不明确的内容。
如果您不介意额外的努力或私人仓库的变化不足以证明CI / CD中的额外复杂性,您也可以使用npm pack
/ yarn pack
来创建tarball文件,运行上面列出的yarn add file:...
命令来修改你的package.json
,只需将tarball文件检入你的仓库。
注意:请注意,如果您检查tarball文件的repo是公开的,那么您的私人仓库/包的来源也将公开。