diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml new file mode 100644 index 00000000..b7ecdd65 --- /dev/null +++ b/.github/workflows/deploy_tencent_scf.yml @@ -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 }} diff --git a/README.md b/README.md index 85ca3795..04d49abf 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ - 需自行有云服务器,云函数等 - 腾讯云云函数 [快速部署教程](tencentscf.md)(免费) - 腾讯云云函数控制台使用 [教程说明](iCloud.md) + - 腾讯云云函数 [GitHub Action部署教程](tencentscf.md#github-action-部署) ### 方法三:Docker(NAS或VPS用户) diff --git a/serverless.yml b/serverless.yml index 69c157e2..393d4c14 100644 --- a/serverless.yml +++ b/serverless.yml @@ -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 # 不要删除,用来格式化对齐追加的变量的 diff --git a/tencentscf.md b/tencentscf.md index 49b1858a..e5a7084b 100644 --- a/tencentscf.md +++ b/tencentscf.md @@ -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_ID,TENCENT_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设置触发器)