diff --git a/.github/workflows/deploy_tencent_scf.yml b/.github/workflows/deploy_tencent_scf.yml index 46809ffb..2de23589 100644 --- a/.github/workflows/deploy_tencent_scf.yml +++ b/.github/workflows/deploy_tencent_scf.yml @@ -7,6 +7,68 @@ jobs: build: runs-on: ubuntu-latest if: github.event.repository.owner.id == github.event.sender.id + env: + JD_COOKIE: ${{ secrets.JD_COOKIE}} + JD_DEBUG: ${{ secrets.JD_DEBUG}} + JD_USER_AGENT: ${{ secrets.JD_USER_AGENT}} + TENCENTSCF_SOURCE_TYPE: ${{ secrets.TENCENTSCF_SOURCE_TYPE}} + TENCENTSCF_SOURCE_URL: ${{ secrets.TENCENTSCF_SOURCE_URL}} + 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}} + QYWX_KEY: ${{ secrets.QYWX_KEY}} + IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}} + QQ_SKEY: ${{ secrets.QQ_SKEY}} + QQ_MODE: ${{ secrets.QQ_MODE}} + PUSH_PLUS_TOKEN: ${{ secrets.PUSH_PLUS_TOKEN}} + PUSH_PLUS_USER: ${{ secrets.PUSH_PLUS_USER}} + TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}} + TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}} + FRUITSHARECODES: ${{ secrets.FRUITSHARECODES}} + PETSHARECODES: ${{ secrets.PETSHARECODES}} + PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}} + SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}} + DDFACTORY_SHARECODES: ${{ secrets.DDFACTORY_SHARECODES}} + DREAM_FACTORY_SHARE_CODES: ${{ secrets.DREAM_FACTORY_SHARE_CODES}} + JDZZ_SHARECODES: ${{ secrets.JDZZ_SHARECODES}} + JDJOY_SHARECODES: ${{ secrets.JDJOY_SHARECODES}} + BOOKSHOP_SHARECODES: ${{ secrets.BOOKSHOP_SHARECODES}} + JD_CASH_SHARECODES: ${{ secrets.JD_CASH_SHARECODES}} + JXNC_SHARECODES: ${{ secrets.JXNC_SHARECODES}} + JDSGMH_SHARECODES: ${{ secrets.JDSGMH_SHARECODES}} + 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}} + PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}} + FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}} + JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}} + JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}} + JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}} + JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}} + JOY_TEAM_LEVEL: ${{ secrets.JOY_TEAM_LEVEL}} + JOY_RUN_NOTIFY: ${{ secrets.JOY_RUN_NOTIFY}} + 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}} + JOIN_PK_TEAM: ${{ secrets.JOIN_PK_TEAM}} + 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}} + JDJOY_HELPSELF: ${{ secrets.JDJOY_HELPSELF}} + JDJOY_APPLYJDBEAN: ${{ secrets.JDJOY_APPLYJDBEAN}} + BUY_JOY_LEVEL: ${{ secrets.BUY_JOY_LEVEL}} + MONEY_TREE_SELL_FRUIT: ${{ secrets.MONEY_TREE_SELL_FRUIT}} + FACTORAY_WANTPRODUCT_NAME: ${{ secrets.FACTORAY_WANTPRODUCT_NAME}} + JXNCTOKENS: ${{ secrets.JXNCTOKENS}} + DREAMFACTORY_FORBID_ACCOUNT: ${{ secrets.DREAMFACTORY_FORBID_ACCOUNT}} + JDFACTORY_FORBID_ACCOUNT: ${{ secrets.JDFACTORY_FORBID_ACCOUNT}} + steps: - name: Checkout uses: actions/checkout@v2 @@ -22,6 +84,8 @@ jobs: run: | npm install npm install tencentcloud-sdk-nodejs + npm install got + npm install tough-cookie npm install js-yaml - name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量" @@ -88,70 +152,10 @@ jobs: if [ $JDFACTORY_FORBID_ACCOUNT ]; then sed -i "/variables/a\ JDFACTORY_FORBID_ACCOUNT: $JDFACTORY_FORBID_ACCOUNT" serverless.yml; fi; cat serverless.yml env - env: #因为直接读取secrets里面的值很多字符不会自动转译,导致写入serverless.yml异常,所以设置到环境变量,在读取环境变量转译过的值 - JD_COOKIE: ${{ secrets.JD_COOKIE}} - JD_DEBUG: ${{ secrets.JD_DEBUG}} - JD_USER_AGENT: ${{ secrets.JD_USER_AGENT}} - TENCENTSCF_SOURCE_TYPE: ${{ secrets.TENCENTSCF_SOURCE_TYPE}} - TENCENTSCF_SOURCE_URL: ${{ secrets.TENCENTSCF_SOURCE_URL}} - 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}} - QYWX_KEY: ${{ secrets.QYWX_KEY}} - IGOT_PUSH_KEY: ${{ secrets.IGOT_PUSH_KEY}} - QQ_SKEY: ${{ secrets.QQ_SKEY}} - QQ_MODE: ${{ secrets.QQ_MODE}} - PUSH_PLUS_TOKEN: ${{ secrets.PUSH_PLUS_TOKEN}} - PUSH_PLUS_USER: ${{ secrets.PUSH_PLUS_USER}} - TG_PROXY_HOST: ${{ secrets.TG_PROXY_HOST}} - TG_PROXY_PORT: ${{ secrets.TG_PROXY_PORT}} - FRUITSHARECODES: ${{ secrets.FRUITSHARECODES}} - PETSHARECODES: ${{ secrets.PETSHARECODES}} - PLANT_BEAN_SHARECODES: ${{ secrets.PLANT_BEAN_SHARECODES}} - SUPERMARKET_SHARECODES: ${{ secrets.SUPERMARKET_SHARECODES}} - DDFACTORY_SHARECODES: ${{ secrets.DDFACTORY_SHARECODES}} - DREAM_FACTORY_SHARE_CODES: ${{ secrets.DREAM_FACTORY_SHARE_CODES}} - JDZZ_SHARECODES: ${{ secrets.JDZZ_SHARECODES}} - JDJOY_SHARECODES: ${{ secrets.JDJOY_SHARECODES}} - BOOKSHOP_SHARECODES: ${{ secrets.BOOKSHOP_SHARECODES}} - JD_CASH_SHARECODES: ${{ secrets.JD_CASH_SHARECODES}} - JXNC_SHARECODES: ${{ secrets.JXNC_SHARECODES}} - JDSGMH_SHARECODES: ${{ secrets.JDSGMH_SHARECODES}} - 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}} - PET_NOTIFY_CONTROL: ${{ secrets.PET_NOTIFY_CONTROL}} - FRUIT_NOTIFY_CONTROL: ${{ secrets.FRUIT_NOTIFY_CONTROL}} - JD_JOY_REWARD_NOTIFY: ${{ secrets.JD_JOY_REWARD_NOTIFY}} - JOY_FEED_COUNT: ${{ secrets.JOY_FEED_COUNT}} - JOY_HELP_FEED: ${{ secrets.JOY_HELP_FEED}} - JOY_RUN_FLAG: ${{ secrets.JOY_RUN_FLAG}} - JOY_TEAM_LEVEL: ${{ secrets.JOY_TEAM_LEVEL}} - JOY_RUN_NOTIFY: ${{ secrets.JOY_RUN_NOTIFY}} - 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}} - JOIN_PK_TEAM: ${{ secrets.JOIN_PK_TEAM}} - 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}} - JDJOY_HELPSELF: ${{ secrets.JDJOY_HELPSELF}} - JDJOY_APPLYJDBEAN: ${{ secrets.JDJOY_APPLYJDBEAN}} - BUY_JOY_LEVEL: ${{ secrets.BUY_JOY_LEVEL}} - MONEY_TREE_SELL_FRUIT: ${{ secrets.MONEY_TREE_SELL_FRUIT}} - FACTORAY_WANTPRODUCT_NAME: ${{ secrets.FACTORAY_WANTPRODUCT_NAME}} - JXNCTOKENS: ${{ secrets.JXNCTOKENS}} - DREAMFACTORY_FORBID_ACCOUNT: ${{ secrets.DREAMFACTORY_FORBID_ACCOUNT}} - JDFACTORY_FORBID_ACCOUNT: ${{ secrets.JDFACTORY_FORBID_ACCOUNT}} - name: "压缩文件夹" run: zip -r myfile.zip ./* + - name: "部署到腾讯云函数" run: node tencentscf.js env: @@ -161,3 +165,6 @@ jobs: TENCENT_SECRET_KEY: ${{ secrets.TENCENT_SECRET_KEY }} TENCENT_REGION: ${{ secrets.SCF_REGION }} TENCENT_FUNCTION_NAME: ${{ secrets.TENCENT_FUNCTION_NAME }} + + - name: "部署失败通知" + run: node action.js diff --git a/tencentscf.js b/tencentscf.js index f5b128e6..10a8ee06 100644 --- a/tencentscf.js +++ b/tencentscf.js @@ -2,6 +2,7 @@ const tencentcloud = require("tencentcloud-sdk-nodejs"); const fs = require('fs') const yaml = require('js-yaml'); +process.env.action = 0; const ScfClient = tencentcloud.scf.v20180416.Client; @@ -28,47 +29,64 @@ const sleep = ms => new Promise(res => setTimeout(res, ms)); const file_buffer = fs.readFileSync('./myfile.zip'); const contents_in_base64 = file_buffer.toString('base64'); if(func.length){ - console.log(`函数已存在,去更新函数`) - // 更新代码 + console.log(`更新函数`) + // 更新代码,删除后重建 params = { - "Handler": "index.main_handler", "FunctionName": process.env.TENCENT_FUNCTION_NAME, - "ZipFile": contents_in_base64 + }; - await client.UpdateFunctionCode(params).then( + await client.DeleteFunction(params).then( (data) => { console.log(data); }, (err) => { console.error("error", err); + process.env.action ++; } ); - } else{ - console.log(`函数不存在,去创建函数`) + await sleep(1000*50) // 等待50秒 + } + console.log(`创建函数`) + let inputYML = ".github/workflows/deploy_tencent_scf.yml"; + let obj = yaml.load(fs.readFileSync(inputYML, { encoding: "utf-8" })); params = { "Code": { "ZipFile": contents_in_base64 }, "FunctionName": process.env.TENCENT_FUNCTION_NAME, - "Runtime": "Nodejs12.16" + "Runtime": "Nodejs12.16", + "Timeout": 900, + "Environment": { + "Variables": [] + } }; + for (let key in obj.jobs.build.env) { + if (process.env[key].length > 0) { + params.Environment.Variables.push({ + Key: key, + Value: process.env[key] + }); + } + } await client.CreateFunction(params).then( (data) => { console.log(data); }, (err) => { console.error("error", err); + process.env.action ++; } ); - await sleep(1000*100) // 等待100秒 - } + await sleep(1000*50) // 等待50秒 + }, (err) => { console.error("error", err); + process.env.action ++; } ); - console.log(`更新环境变量`) +/* console.log(`更新环境变量`) // 更新环境变量 let inputYML = '.github/workflows/deploy_tencent_scf.yml'; let obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'})) @@ -122,11 +140,11 @@ const sleep = ms => new Promise(res => setTimeout(res, ms)); console.error("error", err); } ); - } + }*/ // 更新触发器 console.log(`去更新触发器`) - inputYML = 'serverless.yml'; - obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'})) + let inputYML = 'serverless.yml'; + let obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'})) for(let vo of obj.inputs.events){ let param = { "FunctionName": process.env.TENCENT_FUNCTION_NAME, @@ -142,6 +160,7 @@ const sleep = ms => new Promise(res => setTimeout(res, ms)); }, (err) => { console.error("error", err); + process.env.action ++; } ); } @@ -149,4 +168,13 @@ const sleep = ms => new Promise(res => setTimeout(res, ms)); })() .catch((e) => console.log(e)) .finally(async () => { + if (process.env.GITHUB_ACTIONS == "true") { + fs.writeFile('action.js', `var action = `+process.env.action+`;action > 0 ? require("./sendNotify").sendNotify("云函数部署异常!请重试","点击通知,登入后查看详情",{ url: process.env.GITHUB_SERVER_URL + "/" + process.env.GITHUB_REPOSITORY + "/actions/runs/" + process.env.GITHUB_RUN_ID + "?check_suite_focus=true" }): ""`,'utf8',function(error){ + if(error){ + console.log(error); + return false; + } + console.log('写入成功'); + }) + } })