腾讯云函数 自动化构建与部署
前文已经实现了在本地构建一个Go程序并以事件函数或者web函数的形式部署到serverless平台上,但是操作还是过于繁琐,并且windows下构建的Linux程序还存在无法给予执行权限的问题,所以这一章中,我尝试采用Github actions来构建并通过Serverless Framework部署,实现构建与部署的自动化。
通过Serverless Framework部署
参考 https://cloud.tencent.com/developer/article/1510289 ,同时为了解决windows下构建的程序缺少可执行权限的问题,所以采用Github actions构建并发布到scf的方式来实现代码的部署。
命令行控制腾讯云函数,可以借助Serverless Framework这个框架来实现,在本地已经有nodejs的环境下通过 npm install -g serverless
安装serverless framework。
使用serverless
以交互式的方式初始化一个serverless云函数目录。
选择部署到云端后,居然是 扫码或者点击链接登陆的…不过如果在初始化项目后马上部署到云端,那么你是没办法进行配置的,所以这里可以先不部署。
先看看serverless初始化出来的目录,重点是 serverless.yaml 这个文件,我们可以直接复制到我们自己的项目的文件夹中,以前面的web函数中的简易http服务器为例,查看该yaml的内容.
|
|
因为在scf平台上我已经创建了云函数了,我希望后续的部署是替换已有的函数,而不是重新创建一个新的函数,所以这里我把app和region以及资源限制都改成了我所使用的值,然后serverless.yaml所在的文件夹中使用 serverless deploy
进行部署。我们也可以使用腾讯云的api和secret来进行部署,在本地新建一个 .env 文件,写入下面的两个环境变量即可,之后也可以改用 actions secret来设置环境变量。
serverless.yaml 完全配置 注意,如果是web类型的云函数,默认生成的配置是用不了的,所以一定要针对自己的需求仔细查看这个配置说明
|
|
下面贴一下我的 yaml 文件 触发器部分还存在问题,绑定不上触发器…
|
|
部分配置可能不是很好填,比如触发器之类的,网上的资料 貌似都是针对事件触发函数的写法,而没有适用于web函数的,照着事件触发函数的api网关的写法写上去,部署之后代码依旧关联不上api网关,无法从外部调用,折腾来折腾去,我的解决方案是:ignoreTriggers: true 忽略触发器,也就是说这个 serverless.yaml 文件不再定义触发器(api网关), api网关由我们自己手动去网页上设置。如果不加上这个选项,即使我们手动设置好了,下一次部署也会把已有的api网关关联覆盖掉。
之后如果能找到更合适的方法再更新。
通过Github Actions 构建
先前往 https://console.cloud.tencent.com/cam/capi 获取密钥。 然后项目推到github上,在setting中添加secret环境变量
然后在网页中打开Actions页面,先选择一个Go的标准workflow作为基础,在其上添加scf的工作流。
|
|
docker镜像方式部署
如此,每次我们push都会触发一次构建与部署,工作体验要比之前好一些了。