From 65ef9b8138359c9b463a1bceb66cf3fa399621f1 Mon Sep 17 00:00:00 2001 From: shylocks Date: Tue, 26 Jan 2021 23:12:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=91=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tencentscf.js | 175 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 124 insertions(+), 51 deletions(-) diff --git a/tencentscf.js b/tencentscf.js index ba6a9bab..94680cba 100644 --- a/tencentscf.js +++ b/tencentscf.js @@ -1,8 +1,7 @@ // Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher const tencentcloud = require("tencentcloud-sdk-nodejs"); const fs = require('fs') -const file_buffer = fs.readFileSync('./myfile.zip'); -const contents_in_base64 = file_buffer.toString('base64'); +const yaml = require('js-yaml'); const ScfClient = tencentcloud.scf.v20180416.Client; @@ -18,57 +17,77 @@ const clientConfig = { }, }, }; +const sleep = ms => new Promise(res => setTimeout(res, ms)); +!(async () => { + const client = new ScfClient(clientConfig); -const client = new ScfClient(clientConfig); -let params = { - "Handler": "index.main_handler", - "FunctionName": process.env.TENCENT_FUNCTION_NAME, // 云函数程序名,例如 jd_scripts - "ZipFile": contents_in_base64 -}; -client.UpdateFunctionCode(params).then( - (data) => { - console.log(data); - }, - (err) => { - console.error("error", err); - } -); + let params + await client.ListFunctions({}).then( + async (data) => { + let func = data.Functions.filter(vo=>vo.FunctionName===process.env.TENCENT_FUNCTION_NAME) + const file_buffer = fs.readFileSync('./myfile.zip'); + const contents_in_base64 = file_buffer.toString('base64'); + if(func.length){ + console.log(`函数已存在,去更新函数`) + // 更新代码 + params = { + "Handler": "index.main_handler", + "FunctionName": process.env.TENCENT_FUNCTION_NAME, + "ZipFile": contents_in_base64 + }; + await client.UpdateFunctionCode(params).then( + (data) => { + console.log(data); + }, + (err) => { + console.error("error", err); + } + ); + } else{ + console.log(`函数不存在,去创建函数`) + params = { + "Code": { + "ZipFile": contents_in_base64 + }, + "FunctionName": process.env.TENCENT_FUNCTION_NAME, + "Runtime": "Nodejs12.16" + }; + await client.CreateFunction(params).then( + (data) => { + console.log(data); + }, + (err) => { + console.error("error", err); + } + ); + await sleep(1000*100) // 等待100秒 + } + }, + (err) => { + console.error("error", err); + } + ); -// 更新环境变量 -let vars = [] -for(let key in process.env){ - vars.push({ - "Key": key, - "Value": process.env[key] - }) -} - -params = { - "Environment": { - "Variables": vars + console.log(`更新环境变量`) + // 更新环境变量 + let inputYML = '.github/workflows/deploy_tencent_scf.yml'; + let obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'})) + let vars = [] + for(let key in obj.jobs.build.steps[3].env){ + if(key!=='PATH' && process.env.hasOwnProperty(key)) + vars.push({ + "Key": key, + "Value": process.env[key] + }) } -}; -client.UpdateFunctionConfiguration(params).then( - (data) => { - console.log(data); - }, - (err) => { - console.error("error", err); - } -); - -// 更新触发器 -const inputYML = 'serverless.yml'; -const yaml = require('js-yaml'); -const obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'})) -for(let vo of obj.inputs.events){ - let param = { - 'Type' : "timer", - 'TriggerDesc' : vo.timer.parameters.cronExpression, - 'CustomArgument' : vo.timer.parameters.argument, - 'Enable' : "true" - } - client.CreateTrigger(param).then( + console.log(`您一共填写了${vars.length}个环境变量`) + params = { + "FunctionName": process.env.TENCENT_FUNCTION_NAME, + "Environment": { + "Variables": vars + } + }; + await client.UpdateFunctionConfiguration(params).then( (data) => { console.log(data); }, @@ -76,4 +95,58 @@ for(let vo of obj.inputs.events){ console.error("error", err); } ); -} + let triggers = [] + params = { + "FunctionName": process.env.TENCENT_FUNCTION_NAME, + } + await client.ListTriggers(params).then( + (data) => { + console.log(data); + triggers = data.Triggers + }, + (err) => { + console.error("error", err); + } + ); + for(let vo of triggers){ + params = { + "FunctionName": process.env.TENCENT_FUNCTION_NAME, + "Type": "timer", + "TriggerName": vo.TriggerName + } + await client.DeleteTrigger(params).then( + (data) => { + console.log(data); + }, + (err) => { + console.error("error", err); + } + ); + } + // 更新触发器 + console.log(`去更新触发器`) + inputYML = 'serverless.yml'; + obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'})) + for(let vo of obj.inputs.events){ + let param = { + "FunctionName": process.env.TENCENT_FUNCTION_NAME, + "TriggerName": vo.timer.parameters.name, + 'Type' : "timer", + 'TriggerDesc' : vo.timer.parameters.cronExpression, + 'CustomArgument' : vo.timer.parameters.argument, + 'Enable' : "OPEN", + } + await client.CreateTrigger(param).then( + (data) => { + console.log(data); + }, + (err) => { + console.error("error", err); + } + ); + } + +})() + .catch((e) => console.log(e)) + .finally(async () => { + })