解决云函数环境变量部署失败问题,添加失败通知
This commit is contained in:
129
.github/workflows/deploy_tencent_scf.yml
vendored
129
.github/workflows/deploy_tencent_scf.yml
vendored
@ -7,6 +7,68 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event.repository.owner.id == github.event.sender.id
|
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:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -22,6 +84,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
npm install
|
npm install
|
||||||
npm install tencentcloud-sdk-nodejs
|
npm install tencentcloud-sdk-nodejs
|
||||||
|
npm install got
|
||||||
|
npm install tough-cookie
|
||||||
npm install js-yaml
|
npm install js-yaml
|
||||||
|
|
||||||
- name: "将Secrets里面配置的变量添加到severless.yml里面作为环境变量"
|
- 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;
|
if [ $JDFACTORY_FORBID_ACCOUNT ]; then sed -i "/variables/a\ JDFACTORY_FORBID_ACCOUNT: $JDFACTORY_FORBID_ACCOUNT" serverless.yml; fi;
|
||||||
cat serverless.yml
|
cat serverless.yml
|
||||||
env
|
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: "压缩文件夹"
|
- name: "压缩文件夹"
|
||||||
run: zip -r myfile.zip ./*
|
run: zip -r myfile.zip ./*
|
||||||
|
|
||||||
- name: "部署到腾讯云函数"
|
- name: "部署到腾讯云函数"
|
||||||
run: node tencentscf.js
|
run: node tencentscf.js
|
||||||
env:
|
env:
|
||||||
@ -161,3 +165,6 @@ jobs:
|
|||||||
TENCENT_SECRET_KEY: ${{ secrets.TENCENT_SECRET_KEY }}
|
TENCENT_SECRET_KEY: ${{ secrets.TENCENT_SECRET_KEY }}
|
||||||
TENCENT_REGION: ${{ secrets.SCF_REGION }}
|
TENCENT_REGION: ${{ secrets.SCF_REGION }}
|
||||||
TENCENT_FUNCTION_NAME: ${{ secrets.TENCENT_FUNCTION_NAME }}
|
TENCENT_FUNCTION_NAME: ${{ secrets.TENCENT_FUNCTION_NAME }}
|
||||||
|
|
||||||
|
- name: "部署失败通知"
|
||||||
|
run: node action.js
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
const tencentcloud = require("tencentcloud-sdk-nodejs");
|
const tencentcloud = require("tencentcloud-sdk-nodejs");
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const yaml = require('js-yaml');
|
const yaml = require('js-yaml');
|
||||||
|
process.env.action = 0;
|
||||||
|
|
||||||
const ScfClient = tencentcloud.scf.v20180416.Client;
|
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 file_buffer = fs.readFileSync('./myfile.zip');
|
||||||
const contents_in_base64 = file_buffer.toString('base64');
|
const contents_in_base64 = file_buffer.toString('base64');
|
||||||
if(func.length){
|
if(func.length){
|
||||||
console.log(`函数已存在,去更新函数`)
|
console.log(`更新函数`)
|
||||||
// 更新代码
|
// 更新代码,删除后重建
|
||||||
params = {
|
params = {
|
||||||
"Handler": "index.main_handler",
|
|
||||||
"FunctionName": process.env.TENCENT_FUNCTION_NAME,
|
"FunctionName": process.env.TENCENT_FUNCTION_NAME,
|
||||||
"ZipFile": contents_in_base64
|
|
||||||
};
|
};
|
||||||
await client.UpdateFunctionCode(params).then(
|
await client.DeleteFunction(params).then(
|
||||||
(data) => {
|
(data) => {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
console.error("error", err);
|
console.error("error", err);
|
||||||
|
process.env.action ++;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else{
|
await sleep(1000*50) // 等待50秒
|
||||||
console.log(`函数不存在,去创建函数`)
|
}
|
||||||
|
console.log(`创建函数`)
|
||||||
|
let inputYML = ".github/workflows/deploy_tencent_scf.yml";
|
||||||
|
let obj = yaml.load(fs.readFileSync(inputYML, { encoding: "utf-8" }));
|
||||||
params = {
|
params = {
|
||||||
"Code": {
|
"Code": {
|
||||||
"ZipFile": contents_in_base64
|
"ZipFile": contents_in_base64
|
||||||
},
|
},
|
||||||
"FunctionName": process.env.TENCENT_FUNCTION_NAME,
|
"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(
|
await client.CreateFunction(params).then(
|
||||||
(data) => {
|
(data) => {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
console.error("error", err);
|
console.error("error", err);
|
||||||
|
process.env.action ++;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
await sleep(1000*100) // 等待100秒
|
await sleep(1000*50) // 等待50秒
|
||||||
}
|
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
console.error("error", err);
|
console.error("error", err);
|
||||||
|
process.env.action ++;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log(`更新环境变量`)
|
/* console.log(`更新环境变量`)
|
||||||
// 更新环境变量
|
// 更新环境变量
|
||||||
let inputYML = '.github/workflows/deploy_tencent_scf.yml';
|
let inputYML = '.github/workflows/deploy_tencent_scf.yml';
|
||||||
let obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'}))
|
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.error("error", err);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}*/
|
||||||
// 更新触发器
|
// 更新触发器
|
||||||
console.log(`去更新触发器`)
|
console.log(`去更新触发器`)
|
||||||
inputYML = 'serverless.yml';
|
let inputYML = 'serverless.yml';
|
||||||
obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'}))
|
let obj = yaml.load(fs.readFileSync(inputYML, {encoding: 'utf-8'}))
|
||||||
for(let vo of obj.inputs.events){
|
for(let vo of obj.inputs.events){
|
||||||
let param = {
|
let param = {
|
||||||
"FunctionName": process.env.TENCENT_FUNCTION_NAME,
|
"FunctionName": process.env.TENCENT_FUNCTION_NAME,
|
||||||
@ -142,6 +160,7 @@ const sleep = ms => new Promise(res => setTimeout(res, ms));
|
|||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
console.error("error", 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))
|
.catch((e) => console.log(e))
|
||||||
.finally(async () => {
|
.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('写入成功');
|
||||||
|
})
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user