云开发 Action,赋予 GitHub 云上超能力

杏奴
• 阅读 1620

背景

来自社区的@beetcb ,前几天参与了 Tencent CloudBase Github Action V2 ( AKA 云开发 Atcion) 的代码与文档贡献。如果你对使用 GitHub 自动构建和部署云开发项目感兴趣,欢迎随我来共同尝鲜 V2 版云开发 Action:TencentCloudBase/cloudbase-action

为何需要在意 GitHub Actions ?

GitHub Actions 是 GitHub 推出的一项解放双手、自动化开发流程的 CI/CD 服务。举个直观的例子,我们在浏览许多开源项目的时候,Git Commit 右边经常出现小红叉、小绿勾:
云开发 Action,赋予 GitHub 云上超能力

那么这个项目一定使用了 GitHub Actions (或其他 CI/CD 服务)。

这表明了很多项目对 GitHub Actions 的高度依赖,它在社区也是被高度认可的 👍。拿腾讯云开发来说,通过在项目中引入云开发 Action,即时便拥有了更优雅的自动化开发流程:

  • 一体化:开发、代码审查、Issue、PR、构建、部署都不用离开 GitHub,使专注变为常态
  • 一键部署 › 自动部署:使用或了解过 CloudBase Framework 的用户都知道一键部署这个非常方便的服务,再加上云开发 Action,每次代码变更 (push pr star ...) 就可触发一键部署,不再需要人工干预
  • 对私密型数据更好的保护:密钥一经上传到 GitHub Secrets 之后,便不可能以任何形式明文查看该密钥,这比本地的 .env 安全地多 🔐

云开发 Action V1 的局限

我曾使用过 V1 版本来部署我的博客项目,十分方便,这也是我第一次上手云开发。随着对云开发的熟悉,回过头来也不难发现 V1 项目的局限:只支持静态部署并且缺乏维护,可能是兵哥 (@binggg) 很忙吧 🙉。

打破局限,拥抱 V2

发现了 V1 的局限,我尝试寻找一种解决方案,cloudbase-manager-node 是我的第一个尝试:TencentCloudBase/cloudbase-manager-node

这也是 V1 的解决方案,它也支持很多对其它云开发项目的管理。幸运的是,cloudbase-framework 及时出现在我的脑中:Tencent/cloudbase-framework

它是云开发官方出品的前后端一体化部署工具,并配有丰富的插件;使用一个简单的配置文件,并结合 CloudBase CLI 工具,即可一键部署。

有了 cloudbase-framework ,我们就可以避免在 Action 中的二次开发,相反,用一套更加成熟的部署方案来替代

开发 V2 的过程

此次 V2 的开发 GitHub Action 真的很简单,这都要感谢 cloudbase-framework 提供的一键部署能力。总结下来,把~大象~应用装进~冰箱~云开发只要三部:

npm install -g @cloudbase/cli
tcb login --apiKeyId "$SECRET_ID" --apiKey "$SECRET_KEY"
tcb framework deploy -e "$ENV_ID"

安装 → 登录 → 部署, 就是如此简单!

由于此过程不包含任何代码上的逻辑,所以我们并没有使用任何编程语言来实现这些过程;经过考量,我们选择了执行这些命令最快的地方 — SHELL ,用 GitHub 文档的术语来说,它是一个 composite run steps action ,核心的功能实现后,剩下的就是体验上的优化:

  • 输出的简化:剔除部署时输出的无用信息,减少无用日志的输出
  • 步骤分组:我们将三个关键的步骤分为三组,并追踪并高亮正在执行的命令,让用户更清楚当前的状态
  • 文档优化:利用一个简单的云函数部署,手把手教你配置 ( 就在下面,点它点它 👇 )TencentCloudBase/cloudbase-action

快速上手 V2

枯燥的文字哪有代码有趣 ? 接下来的时间,我们来快速上手一下云开发 Action :
云开发 Action,赋予 GitHub 云上超能力

本示例将演示:如何快速部署云函数到 CloudBase (同时设定部署的私密环境变量作为云函数 RUNTIME 的环境变量)

1 、首先我们需要在项目中引入云开发 Action,编写如下的 Github Action 文件 .github/workflows/main.yml

on: [push]

jobs:
  deploy:
    runs-on: ubuntu-latest
    name: Tencent Cloudbase Github Action Example
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Deploy to Tencent CloudBase
        uses: TencentCloudBase/cloudbase-action@v2
        with:
          secretId: ${{secrets.secretId}}
          secretKey: ${{secrets.secretKey}}
          envId: ${{secrets.envId}}

关于此配置文件的详细说明

假设我们在部署时需要设置私密型的环境变量(比如小程序 appid 或访问数据库的 accessToken),请在以上代码中新增以下内容:

name: Tencent Cloudbase Github Action Example
+env:
+  accessToken: ${{ secrets.accessToken }}

其中 env 下的 accessToken 键值对是我们部署时设置的环境变量,它的功能与本地的 .env 文件相同
2 、为了使用云开发 Action V2 部署云函数,我们必须要在项目中配置 cloudbaserc.json 文件(并引入云函数插件和我们刚刚配置的环境变量):

{
  "envId": "{{env.ENV_ID}}",
  "version": "2.0",
  "framework": {
    "name": "gh-actions-test",
    "plugins": {
      "func": {
        "use": "@cloudbase/framework-plugin-function",
        "inputs": {
          "functions": [
            {
              "name": "example",
              "memorySize": 128,
              "timeout": 5,
              "runtime": "Nodejs10.15",
              "handler": "index.main",
              "envVariables": {
                "accessToken": "{{env.accessToken}}"
              }
            }
          ]
        }
      }
    }
  }
}

关于此配置文件的详细说明

3 、在项目 Settings/Secrets 里设置 secretId, secretKey, envId, accessToken 信息

云开发 Action,赋予 GitHub 云上超能力

4 、配置完成后,提交代码到 Github 时,云开发 Action V2 就会自动部署项目中的 example 函数到云开发中,即时函数的环境变量也会设置成功

欢迎贡献

相信你看完此篇文章,对 V2 能有更清晰的认识,也更有信心来参与到本项目中来。本项目遵循 All Contributors 规范,任何形式的贡献都会被加入贡献者名单,欢迎你的贡献 💗

CloudBase Framework 开源项目介绍

🚀 CloudBase Framework 是云开发开源的云原生前后端一体化部署工具,支持主流前后端框架,前后端一键托管部署在云端一体化平台,支持支持小程序、Web、Flutter、后端服务等多个平台。

Github 开源地址:https://github.com/Tencent/cloudbase-framework

欢迎给 CloudBase Framework 一个 🌟 star

CloudBase Framework 核心贡献者计划

欢迎大家参与 CloudBase Framework 的开发工作,成为我们的贡献者,我们将会在云开发社区展示贡献者的作品和信息,同时也会有惊喜奖励。

您可以选择如下的贡献方式:

CloudBase Framework 的发展离不开社区的积极贡献,这是我们的核心贡献者列表,再次感谢大家的贡献:https://github.com/Tencent/cloudbase-framework#contributors-

产品介绍

云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等serverless化能力,可用于云端一体化开发多种端应用(小程序,公众号,Web 应用,Flutter 客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
开通云开发:https://console.cloud.tencent.com/tcb?tdl_anchor=techsite
产品文档:https://cloud.tencent.com/product/tcb?from=12763
技术文档:https://cloudbase.net?from=10004
技术交流加Q群:601134960
最新资讯关注微信公众号【腾讯云云开发】

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
4年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
4年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
4年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin