From 7256563020978423e7aefab37d6143da8218ae85 Mon Sep 17 00:00:00 2001 From: 787a68 <8571311+eHpo@user.noreply.gitee.com> Date: Wed, 10 Feb 2021 21:04:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tencentscf.js | 223 ++++++++++++++++++++++++++------------------------ 1 file changed, 116 insertions(+), 107 deletions(-) diff --git a/tencentscf.js b/tencentscf.js index 10a8ee06..32a3fb71 100644 --- a/tencentscf.js +++ b/tencentscf.js @@ -1,180 +1,189 @@ // Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher const tencentcloud = require("tencentcloud-sdk-nodejs"); -const fs = require('fs') -const yaml = require('js-yaml'); +const fs = require("fs"); +const yaml = require("js-yaml"); + process.env.action = 0; - const ScfClient = tencentcloud.scf.v20180416.Client; - const clientConfig = { credential: { secretId: process.env.TENCENT_SECRET_ID, - secretKey: process.env.TENCENT_SECRET_KEY, + secretKey: process.env.TENCENT_SECRET_KEY }, region: process.env.TENCENT_REGION, // 区域参考,https://cloud.tencent.com/document/product/583/17299 profile: { httpProfile: { - endpoint: "scf.tencentcloudapi.com", - }, - }, + endpoint: "scf.tencentcloudapi.com" + } + } }; const sleep = ms => new Promise(res => setTimeout(res, ms)); + !(async () => { const client = new ScfClient(clientConfig); - - let params + 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(`更新函数`) + 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 = { - "FunctionName": process.env.TENCENT_FUNCTION_NAME, - + FunctionName: process.env.TENCENT_FUNCTION_NAME }; await client.DeleteFunction(params).then( - (data) => { + data => { console.log(data); }, - (err) => { + err => { console.error("error", err); - process.env.action ++; + process.env.action++; } ); - await sleep(1000*50) // 等待50秒 + 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", - "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*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", + Timeout: 900, + Environment: { + Variables: [] + } + }; + let vars = []; + for (let key in obj.jobs.build.env) { + if (process.env[key].length > 0) { + vars.push(key); + params.Environment.Variables.push({ + Key: key, + Value: process.env[key] + }); + } + } + console.log(`您一共填写了${vars.length}个环境变量`, vars); + await client.CreateFunction(params).then( + data => { + console.log(data); + }, + err => { + console.error("error", err); + process.env.action++; + } + ); + await sleep(1000 * 50); // 等待50秒 }, - (err) => { + err => { console.error("error", err); - process.env.action ++; + 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'})) - let vars = [] - for(let key in obj.jobs.build.steps[3].env){ - if(key!=='PATH' && process.env.hasOwnProperty(key)) + 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] - }) + Key: key, + Value: process.env[key] + }); } - console.log(`您一共填写了${vars.length}个环境变量`) + console.log(`您一共填写了${vars.length}个环境变量`); params = { - "FunctionName": process.env.TENCENT_FUNCTION_NAME, - "Environment": { - "Variables": vars + FunctionName: process.env.TENCENT_FUNCTION_NAME, + Environment: { + Variables: vars } }; await client.UpdateFunctionConfiguration(params).then( - (data) => { + data => { console.log(data); }, - (err) => { + err => { console.error("error", err); } ); - let triggers = [] + let triggers = []; params = { - "FunctionName": process.env.TENCENT_FUNCTION_NAME, - } + FunctionName: process.env.TENCENT_FUNCTION_NAME + }; await client.ListTriggers(params).then( - (data) => { + data => { console.log(data); - triggers = data.Triggers + triggers = data.Triggers; }, - (err) => { + err => { console.error("error", err); } ); - for(let vo of triggers){ + for (let vo of triggers) { params = { - "FunctionName": process.env.TENCENT_FUNCTION_NAME, - "Type": "timer", - "TriggerName": vo.TriggerName - } + FunctionName: process.env.TENCENT_FUNCTION_NAME, + Type: "timer", + TriggerName: vo.TriggerName + }; await client.DeleteTrigger(params).then( - (data) => { + data => { console.log(data); }, - (err) => { + err => { console.error("error", err); } ); - }*/ + } */ + // 更新触发器 - console.log(`去更新触发器`) - let inputYML = 'serverless.yml'; - let obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'})) - for(let vo of obj.inputs.events){ + console.log(`去更新触发器`); + 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, - "TriggerName": vo.timer.parameters.name, - 'Type' : "timer", - 'TriggerDesc' : vo.timer.parameters.cronExpression, - 'CustomArgument' : vo.timer.parameters.argument, - 'Enable' : "OPEN", - } + 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) => { + data => { console.log(data); }, - (err) => { + err => { console.error("error", err); - process.env.action ++; + process.env.action++; } ); } - })() - .catch((e) => console.log(e)) + .catch(e => console.log(e)) .finally(async () => { + // 当环境为GitHub action时创建action.js文件判断部署是否进行失败通知 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){ + 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("写入action.js成功"); } - console.log('写入成功'); - }) + ); } - }) + });