我无法弄清楚如何从云源控制或直接从github中自动部署新推出的云功能。我通过创建另一个函数和github webhook找到了类似的解决方案,但是由于功能无法ssh(并且安装了SSH键),因此它仅与公共存储库一起使用。(https://cloud.google.com/community/tutorials/cloud-functions-github-auto-deployer)
有什么想法如何实现这一目标?谢谢
您可以使用Google Cloud Builder实现此目标。在您的存储库上创建一个触发器,触发的构建将新代码部署到Google Cloud函数。
我做了一个快速的示例:https://github.com/philmod/auto-deploy-gcf
欢呼,Philmod
我设法为此问题找到了合理的解决方法。我希望它可以帮助其他人解决同样的问题。
必需的设置
在开始这些步骤之前,您需要在CI/CD系统上设置SSH键。这就是使您的构建系统SSH访问您的私人存储库的原因。这是一些讨论如何做的文章。
- Gitlab CI 101 -SSH键
- NPM私人模块的替代品
您还需要通过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
和无版本的文件名的CC_12遇到的问题,因此您可能需要进行硬码或找到使用yarn pack
生成的文件名。
结果
如果您尝试在本地运行这两个命令,您会注意到您最终在package.json
文件的dependencies
部分中只有一个新条目,它看起来像这样:
"top_secret": "file:node_modules/top_secret",
这是发生的事情:
- 您正在通过
git+ssh
在具有访问的系统上安装私人存储库作为软件包。 - 您将其从
node_modules/
目录重新包装到tarball文件(.tgz)。 - 您正在使用
file:
从本地TARBALL文件安装相同的软件包 - 由于包装名称是相同的,因此用
file:
输入替换git+ssh
的CC_20条目。
现在,您对云功能的部署现在应该在没有任何问题的情况下进行,并包括您的私人包。祝你好运,让我知道您是否对这些说明有任何问题 - 我很乐意纠正任何错误并重写任何不清楚的事情。
替代方法
如果您不介意额外的努力或私人回购的变化频率不够频繁以证明CI/CD中的额外复杂性,也可以使用npm pack
/yarn pack
来创建TARBALL文件,请运行相同的yarn add file:...
命令上面列出的以修改您的package.json
并简单地将TARBALL文件检查到您的存储库中。
注意:请注意,如果您要检查tarball file的存储库是公开的,那么您的私人回购/软件包的来源也将公开。
参考:
-
yarn add
的文档 -
yarn pack
的文档 -
npm pack
的文档 -
npm install
的文档 - Gitlab CI 101 -SSH键
- NPM私人模块的替代品