Merge pull request #117 from iouAkira/master

增加GitHub Action部署到腾讯云函数
This commit is contained in:
lxk0301
2020-11-18 17:58:01 +08:00
committed by GitHub
4 changed files with 138 additions and 2 deletions

106
.github/workflows/deploy_tencent_scf.yml vendored Normal file
View File

@@ -0,0 +1,106 @@
name: 部署到腾讯云函数
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id
steps:
- name: Checkout
uses: actions/checkout@v2
with:
repository: ${{ github.repository }}
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: "安装依赖和serverless工具"
run: |
npm install
sudo npm install serverless -g
- name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量"
run: |
if [ $JD_COOKIE ]; then sed -i "/variables/a\ JD_COOKIE: $JD_COOKIE" serverless.yml; fi;
if [ $JD_BEAN_STOP ]; then sed -i "/variables/a\ JD_BEAN_STOP: $JD_BEAN_STOP" serverless.yml; fi;
if [ $JD_BEAN_SIGN_STOP_NOTIFY ]; then sed -i "/variables/a\ JD_BEAN_SIGN_STOP_NOTIFY: $JD_BEAN_SIGN_STOP_NOTIFY" serverless.yml; fi;
if [ $JD_BEAN_SIGN_NOTIFY_SIMPLE ]; then sed -i "/variables/a\ JD_BEAN_SIGN_NOTIFY_SIMPLE: $JD_BEAN_SIGN_NOTIFY_SIMPLE" serverless.yml; fi;
if [ $JD_DEBUG ]; then sed -i "/variables/a\ JD_DEBUG: $JD_DEBUG" serverless.yml; fi;
if [ $PUSH_KEY ]; then sed -i "/variables/a\ PUSH_KEY: $PUSH_KEY" serverless.yml; fi;
if [ $BARK_PUSH ]; then sed -i "/variables/a\ BARK_PUSH: $BARK_PUSH" serverless.yml; fi;
if [ $BARK_SOUND ]; then sed -i "/variables/a\ BARK_SOUND: $BARK_SOUND" serverless.yml; fi;
if [ $TG_BOT_TOKEN ]; then sed -i "/variables/a\ TG_BOT_TOKEN: $TG_BOT_TOKEN" serverless.yml; fi;
if [ $TG_USER_ID ]; then sed -i "/variables/a\ TG_USER_ID: $TG_USER_ID" serverless.yml; fi;
if [ $DD_BOT_TOKEN ]; then sed -i "/variables/a\ DD_BOT_TOKEN: $DD_BOT_TOKEN" serverless.yml; fi;
if [ $DD_BOT_SECRET ]; then sed -i "/variables/a\ DD_BOT_SECRET: $DD_BOT_SECRET" serverless.yml; fi;
if [ $IGOT_PUSH_KEY ]; then sed -i "/variables/a\ IGOT_PUSH_KEY: $IGOT_PUSH_KEY" serverless.yml; fi;
if [ $PET_NOTIFY_CONTROL ]; then sed -i "/variables/a\ PET_NOTIFY_CONTROL: $PET_NOTIFY_CONTROL" serverless.yml; fi;
if [ $FRUIT_NOTIFY_CONTROL ]; then sed -i "/variables/a\ FRUIT_NOTIFY_CONTROL: $FRUIT_NOTIFY_CONTROL" serverless.yml; fi;
if [ $JD_JOY_REWARD_NOTIFY ]; then sed -i "/variables/a\ JD_JOY_REWARD_NOTIFY: $JD_JOY_REWARD_NOTIFY" serverless.yml; fi;
if [ $JD_818_SHAREID_NOTIFY ]; then sed -i "/variables/a\ JD_818_SHAREID_NOTIFY: $JD_818_SHAREID_NOTIFY" serverless.yml; fi;
if [ $JOY_FEED_COUNT ]; then sed -i "/variables/a\ JOY_FEED_COUNT: $JOY_FEED_COUNT" serverless.yml; fi;
if [ $JOY_HELP_FEED ]; then sed -i "/variables/a\ JOY_HELP_FEED: $JOY_HELP_FEED" serverless.yml; fi;
if [ $JOY_RUN_FLAG ]; then sed -i "/variables/a\ JOY_RUN_FLAG: $JOY_RUN_FLAG" serverless.yml; fi;
if [ $JD_JOY_REWARD_NAME ]; then sed -i "/variables/a\ JD_JOY_REWARD_NAME: $JD_JOY_REWARD_NAME" serverless.yml; fi;
if [ $MARKET_COIN_TO_BEANS ]; then sed -i "/variables/a\ MARKET_COIN_TO_BEANS: $MARKET_COIN_TO_BEANS" serverless.yml; fi;
if [ $MARKET_REWARD_NOTIFY ]; then sed -i "/variables/a\ MARKET_REWARD_NOTIFY: $MARKET_REWARD_NOTIFY" serverless.yml; fi;
if [ $SUPERMARKET_UPGRADE ]; then sed -i "/variables/a\ SUPERMARKET_UPGRADE: $SUPERMARKET_UPGRADE" serverless.yml; fi;
if [ $BUSINESS_CIRCLE_JUMP ]; then sed -i "/variables/a\ BUSINESS_CIRCLE_JUMP: $BUSINESS_CIRCLE_JUMP" serverless.yml; fi;
if [ $SUPERMARKET_LOTTERY ]; then sed -i "/variables/a\ SUPERMARKET_LOTTERY: $SUPERMARKET_LOTTERY" serverless.yml; fi;
if [ $FRUIT_BEAN_CARD ]; then sed -i "/variables/a\ FRUIT_BEAN_CARD: $FRUIT_BEAN_CARD" serverless.yml; fi;
if [ $UN_SUBSCRIBES ]; then sed -i "/variables/a\ UN_SUBSCRIBES: $UN_SUBSCRIBES" serverless.yml; fi;
if [ $FruitShareCodes ]; then sed -i "/variables/a\ FruitShareCodes: $FruitShareCodes" serverless.yml; fi;
if [ $PETSHARECODES ]; then sed -i "/variables/a\ PETSHARECODES: $PETSHARECODES" serverless.yml; fi;
if [ $PLANT_BEAN_SHARECODES ]; then sed -i "/variables/a\ PLANT_BEAN_SHARECODES: $PLANT_BEAN_SHARECODES" serverless.yml; fi;
if [ $SUPERMARKET_SHARECODES ]; then sed -i "/variables/a\ SUPERMARKET_SHARECODES: $SUPERMARKET_SHARECODES" serverless.yml; fi;
if [ $TG_PROXY_HOST ]; then sed -i "/variables/a\ TG_PROXY_HOST: $TG_PROXY_HOST" serverless.yml; fi;
if [ $TG_PROXY_PORT ]; then sed -i "/variables/a\ TG_PROXY_PORT: $TG_PROXY_PORT" serverless.yml; fi;
cat serverless.yml
env
env: #因为直接读取secrets里面的值很多字符不会自动转译导致写入serverless.yml异常所以设置到环境变量在读取环境变量转译过的值
JD_COOKIE: ${{ secrets.JD_COOKIE}}
JD_BEAN_STOP: ${{ secrets.JD_BEAN_STOP}}
JD_BEAN_SIGN_STOP_NOTIFY: ${{ secrets.JD_BEAN_SIGN_STOP_NOTIFY}}
JD_BEAN_SIGN_NOTIFY_SIMPLE: ${{ secrets.JD_BEAN_SIGN_NOTIFY_SIMPLE}}
JD_DEBUG: ${{ secrets.JD_DEBUG}}
PUSH_KEY: ${{ secrets.PUSH_KEY}}
BARK_PUSH: ${{ secrets.BARK_PUSH}}
BARK_SOUND: ${{ secrets.BARK_SOUND}}
TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN}}
TG_USER_ID: ${{ secrets.TG_USER_ID}}
DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN}}
DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET}}
IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}}
PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}}
FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}}
JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}}
JD_818_SHAREID_NOTIFY: ${{ secrets.JD_818_SHAREID_NOTIFY}}
JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}}
JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}}
JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}}
JD_JOY_REWARD_NAME: ${{ secrets.JD_JOY_REWARD_NAME}}
MARKET_COIN_TO_BEANS: ${{ secrets.MARKET_COIN_TO_BEANS}}
MARKET_REWARD_NOTIFY: ${{ secrets.MARKET_REWARD_NOTIFY}}
SUPERMARKET_UPGRADE: ${{ secrets.SUPERMARKET_UPGRADE}}
BUSINESS_CIRCLE_JUMP: ${{ secrets.BUSINESS_CIRCLE_JUMP}}
SUPERMARKET_LOTTERY: ${{ secrets.SUPERMARKET_LOTTERY}}
FRUIT_BEAN_CARD: ${{ secrets.FRUIT_BEAN_CARD}}
UN_SUBSCRIBES: ${{ secrets.UN_SUBSCRIBES}}
FruitShareCodes: ${{ secrets.FruitShareCodes}}
PETSHARECODES: ${{ secrets.PETSHARECODES}}
PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}}
SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}}
TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}}
TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}}
- name: "部署到腾讯云函数"
run: serverless deploy
env:
STAGE: dev
SERVERLESS_PLATFORM_VENDOR: tencent
TENCENT_SECRET_ID: ${{ secrets.TENCENT_SECRET_ID }}
TENCENT_SECRET_KEY: ${{ secrets.TENCENT_SECRET_KEY }}

View File

@@ -67,6 +67,7 @@
- 需自行有云服务器,云函数等
- 腾讯云云函数 [快速部署教程](tencentscf.md)(免费)
- 腾讯云云函数控制台使用 [教程说明](iCloud.md)
- 腾讯云云函数 [GitHub Action部署教程](tencentscf.md#github-action-部署)
### 方法三DockerNAS或VPS用户

View File

@@ -11,9 +11,9 @@ inputs:
src: ./
handler: index.main_handler #入口
runtime: Nodejs12.16 # 运行环境 默认 Nodejs10.15
region: ap-guangzhou # 函数所在区域
region: ap-hongkong # 函数所在区域
description: This is a function in ${app} application.
memorySize: 64 # 内存大小单位MB
memorySize: 128 # 内存大小单位MB
timeout: 900 # 超时时间,单位秒
events: # 触发器
- timer: # 定时触发器
@@ -22,3 +22,6 @@ inputs:
cronExpression: "0 0 0 */1 * * *" # 每天零点执行一次
enable: true
argument: argument # 额外的参数
environment: # 环境变量
variables: # 环境变量对象
AAA: BBB # 不要删除,用来格式化对齐追加的变量的

View File

@@ -1,5 +1,8 @@
# 云函数快速部署京东脚本
>
> - 本地安装依赖使用serverless部署[点这里](tencentscf.md#1-安装-nodejs-环境)
> - Github Action 部署[点这里](tencentscf.md#github-action-部署)
## 1. 安装 Node.js 环境
@@ -93,3 +96,26 @@ triggers:
![测试函数](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605263963294-test.png)
> 如果需要配置永久秘钥,则可以在[访问秘钥页面](https://console.cloud.tencent.com/cam/capi)获取账号的 TENCENT_SECRET_IDTENCENT_SECRET_KEY并配置在代码根目录 .env 文件中。
# Github Action 部署
## 1. 开通服务
依次登录 [SCF 云函数控制台](https://console.cloud.tencent.com/scf) 和 [SLS 控制台](https://console.cloud.tencent.com/sls) 开通相关服务,确保账户下已开通服务并创建相应[服务角色](https://console.cloud.tencent.com/cam/role) **SCF_QcsRole、SLS_QcsRole**
> 注意!为了确保权限足够,获取这两个参数时不要使用子账户!此外,腾讯云账户需要[实名认证](https://console.cloud.tencent.com/developer/auth)。
## 2. 在这里新建一个访问密钥[新建密钥](https://console.cloud.tencent.com/cam/capi)
> 将SecretId和SecretKey分别配置在仓库的secrets变量里面 TENCENT_SECRET_ID对应你的SecretId的值TENCENT_SECRET_KEY对应你的SecretKey的值
## 3. 配置自己需要secrets变量[参考这里](githubAction.md#下方提供使用到的-secrets全集合)
## 4.执行action workflow进行部署workflow未报错即部署成功
![image](https://user-images.githubusercontent.com/6993269/99513289-6a152980-29c5-11eb-9266-3f56ba13d3b2.png)
## 5. 查看和测试
登录后,在 [腾讯云函数地址](https://console.cloud.tencent.com/scf/index) 点击管理控制台,查看最新部署的函数。
在左侧栏的日志查询中,可以查看到触发的日志,包括是否打卡成功等。
![测试函数](https://imgbed-bucket-1251971143.cos.ap-guangzhou.myqcloud.com/./1605263963294-test.png)
## 6. 设置触发器[看这里](iCloud.md#5设置触发器)