mirror of
https://github.com/certd/certd.git
synced 2026-04-24 04:17:25 +08:00
perf: 优化定时器
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, ILogger, RunStrategy, TaskInput, utils } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput, utils } from "@certd/pipeline";
|
||||
// @ts-ignore
|
||||
import { ROAClient } from "@alicloud/pop-core";
|
||||
import { AliyunAccess } from "../../access";
|
||||
@@ -17,7 +17,7 @@ import { CertInfo } from "@certd/plugin-cert";
|
||||
},
|
||||
},
|
||||
})
|
||||
export class DeployCertToAliyunAckIngressPlugin implements ITaskPlugin {
|
||||
export class DeployCertToAliyunAckIngressPlugin extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: "集群id",
|
||||
component: {
|
||||
@@ -108,8 +108,6 @@ export class DeployCertToAliyunAckIngressPlugin implements ITaskPlugin {
|
||||
@Autowire()
|
||||
logger!: ILogger;
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||||
async onInstance(): Promise<void> {}
|
||||
async execute(): Promise<void> {
|
||||
console.log("开始部署证书到阿里云cdn");
|
||||
const { regionId, ingressClass, clusterId, isPrivateIpAddress, cert } = this;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { Autowire, IAccessService, ILogger, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
|
||||
import dayjs from "dayjs";
|
||||
import Core from "@alicloud/pop-core";
|
||||
import RPCClient from "@alicloud/pop-core";
|
||||
import { AliyunAccess } from "../../access";
|
||||
|
||||
|
||||
@IsTaskPlugin({
|
||||
name: "DeployCertToAliyunCDN",
|
||||
title: "部署证书至阿里云CDN",
|
||||
@@ -15,7 +14,7 @@ import { AliyunAccess } from "../../access";
|
||||
},
|
||||
},
|
||||
})
|
||||
export class DeployCertToAliyunCDN implements ITaskPlugin {
|
||||
export class DeployCertToAliyunCDN extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: "CDN加速域名",
|
||||
helper: "你在阿里云上配置的CDN加速域名,比如certd.docmirror.cn",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, IsTaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
|
||||
import Core from "@alicloud/pop-core";
|
||||
import { AliyunAccess } from "../../access";
|
||||
import { appendTimeSuffix, checkRet, ZoneOptions } from "../../utils";
|
||||
@@ -14,7 +14,7 @@ import { Logger } from "log4js";
|
||||
},
|
||||
},
|
||||
})
|
||||
export class UploadCertToAliyun implements ITaskPlugin {
|
||||
export class UploadCertToAliyun extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: "证书名称",
|
||||
helper: "证书上传后将以此参数作为名称前缀",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Autowire, HttpClient, IAccessService, IContext, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, HttpClient, IAccessService, IContext, IsTaskPlugin, RunStrategy, Step, TaskInput, TaskOutput } from "@certd/pipeline";
|
||||
import dayjs from "dayjs";
|
||||
import { AcmeService, CertInfo } from "./acme";
|
||||
import _ from "lodash";
|
||||
@@ -24,7 +24,7 @@ export type { CertInfo };
|
||||
},
|
||||
},
|
||||
})
|
||||
export class CertApplyPlugin implements ITaskPlugin {
|
||||
export class CertApplyPlugin extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: "域名",
|
||||
component: {
|
||||
@@ -118,7 +118,7 @@ export class CertApplyPlugin implements ITaskPlugin {
|
||||
http!: HttpClient;
|
||||
|
||||
@Autowire()
|
||||
pipelineContext!: IContext;
|
||||
lastStatus!: Step;
|
||||
|
||||
@TaskOutput({
|
||||
title: "域名证书",
|
||||
@@ -137,6 +137,8 @@ export class CertApplyPlugin implements ITaskPlugin {
|
||||
const cert = await this.doCertApply();
|
||||
if (cert != null) {
|
||||
this.output(cert.toCertInfo());
|
||||
//清空后续任务的状态,让后续任务能够重新执行
|
||||
this.clearLastStatus();
|
||||
} else {
|
||||
throw new Error("申请证书失败");
|
||||
}
|
||||
@@ -156,10 +158,7 @@ export class CertApplyPlugin implements ITaskPlugin {
|
||||
}
|
||||
|
||||
let inputChanged = false;
|
||||
const inputCacheKey = "input.domains";
|
||||
const oldInputStr = await this.pipelineContext.getObj(inputCacheKey);
|
||||
await this.pipelineContext.setObj(inputCacheKey, this.domains);
|
||||
const oldInput = JSON.stringify(oldInputStr);
|
||||
const oldInput = JSON.stringify(this.lastStatus?.input?.domains);
|
||||
const thisInput = JSON.stringify(this.domains);
|
||||
if (oldInput !== thisInput) {
|
||||
inputChanged = true;
|
||||
@@ -167,7 +166,7 @@ export class CertApplyPlugin implements ITaskPlugin {
|
||||
|
||||
let oldCert: CertReader | undefined = undefined;
|
||||
try {
|
||||
oldCert = await this.readCurrentCert();
|
||||
oldCert = await this.readLastCert();
|
||||
} catch (e) {
|
||||
this.logger.warn("读取cert失败:", e);
|
||||
}
|
||||
@@ -227,10 +226,8 @@ export class CertApplyPlugin implements ITaskPlugin {
|
||||
isTest: false,
|
||||
});
|
||||
|
||||
await this.writeCert(cert);
|
||||
const ret = await this.readCurrentCert();
|
||||
|
||||
return ret;
|
||||
const certInfo = this.formatCerts(cert);
|
||||
return new CertReader(certInfo);
|
||||
}
|
||||
|
||||
formatCert(pem: string) {
|
||||
@@ -240,20 +237,17 @@ export class CertApplyPlugin implements ITaskPlugin {
|
||||
return pem;
|
||||
}
|
||||
|
||||
async writeCert(cert: { crt: string; key: string; csr: string }) {
|
||||
formatCerts(cert: { crt: string; key: string; csr: string }) {
|
||||
const newCert: CertInfo = {
|
||||
crt: this.formatCert(cert.crt),
|
||||
key: this.formatCert(cert.key),
|
||||
csr: this.formatCert(cert.csr),
|
||||
};
|
||||
await this.pipelineContext.setObj("cert", newCert);
|
||||
await this.pipelineContext.set("cert.crt", newCert.crt);
|
||||
await this.pipelineContext.set("cert.key", newCert.key);
|
||||
await this.pipelineContext.set("cert.csr", newCert.csr);
|
||||
return newCert;
|
||||
}
|
||||
|
||||
async readCurrentCert(): Promise<CertReader | undefined> {
|
||||
const cert: CertInfo = await this.pipelineContext.getObj("cert");
|
||||
async readLastCert(): Promise<CertReader | undefined> {
|
||||
const cert = this.lastStatus?.status?.output?.cert;
|
||||
if (cert == null) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Autowire, IAccessService, ILogger, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
|
||||
import { SshClient } from "../../lib/ssh";
|
||||
|
||||
@IsTaskPlugin({
|
||||
@@ -12,7 +12,7 @@ import { SshClient } from "../../lib/ssh";
|
||||
},
|
||||
output: {},
|
||||
})
|
||||
export class HostShellExecutePlugin implements ITaskPlugin {
|
||||
export class HostShellExecutePlugin extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: "主机登录配置",
|
||||
helper: "登录",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, ILogger, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
|
||||
import { SshClient } from "../../lib/ssh";
|
||||
import { CertInfo, CertReader } from "@certd/plugin-cert";
|
||||
import * as fs from "fs";
|
||||
@@ -12,7 +12,7 @@ import * as fs from "fs";
|
||||
},
|
||||
},
|
||||
})
|
||||
export class UploadCertToHostPlugin implements ITaskPlugin {
|
||||
export class UploadCertToHostPlugin extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: "证书保存路径",
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, ILogger, RunStrategy, TaskInput } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
|
||||
import tencentcloud from "tencentcloud-sdk-nodejs/index";
|
||||
import { TencentAccess } from "../../access";
|
||||
import { CertInfo } from "@certd/plugin-cert";
|
||||
@@ -12,7 +12,7 @@ import { CertInfo } from "@certd/plugin-cert";
|
||||
},
|
||||
},
|
||||
})
|
||||
export class DeployToCdnPlugin implements ITaskPlugin {
|
||||
export class DeployToCdnPlugin extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: "域名证书",
|
||||
helper: "请选择前置任务输出的域名证书",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, ILogger, RunStrategy, TaskInput, utils } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput, utils } from "@certd/pipeline";
|
||||
import tencentcloud from "tencentcloud-sdk-nodejs/index";
|
||||
import { TencentAccess } from "../../access";
|
||||
import dayjs from "dayjs";
|
||||
@@ -13,7 +13,7 @@ import dayjs from "dayjs";
|
||||
},
|
||||
},
|
||||
})
|
||||
export class DeployToClbPlugin implements ITaskPlugin {
|
||||
export class DeployToClbPlugin extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: "大区",
|
||||
value: "ap-guangzhou",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput, utils } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, IsTaskPlugin, RunStrategy, TaskInput, utils } from "@certd/pipeline";
|
||||
import tencentcloud from "tencentcloud-sdk-nodejs/index";
|
||||
import { K8sClient } from "@certd/plugin-util";
|
||||
import dayjs from "dayjs";
|
||||
@@ -14,7 +14,7 @@ import { Logger } from "log4js";
|
||||
},
|
||||
},
|
||||
})
|
||||
export class DeployCertToTencentTKEIngressPlugin implements ITaskPlugin {
|
||||
export class DeployCertToTencentTKEIngressPlugin extends AbstractTaskPlugin {
|
||||
@TaskInput({ title: "大区", value: "ap-guangzhou", required: true })
|
||||
region!: string;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput, TaskOutput, ILogger } from "@certd/pipeline";
|
||||
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
|
||||
import tencentcloud from "tencentcloud-sdk-nodejs/index";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
@@ -12,7 +12,7 @@ import dayjs from "dayjs";
|
||||
},
|
||||
},
|
||||
})
|
||||
export class UploadToTencentPlugin implements ITaskPlugin {
|
||||
export class UploadToTencentPlugin extends AbstractTaskPlugin {
|
||||
@TaskInput({ title: "证书名称" })
|
||||
name!: string;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user