fix: 修复新版本上传到阿里云cas后,其他依赖任务无法部署的bug

This commit is contained in:
xiaojunnuo
2026-02-09 14:29:19 +08:00
parent 9ac33f9b9b
commit 99f5b8ebc1
13 changed files with 206 additions and 167 deletions
@@ -5,7 +5,7 @@ import {
createRemoteSelectInputDefine
} from "@certd/plugin-lib";
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { AliyunClient, AliyunSslClient } from "../../../plugin-lib/aliyun/lib/index.js";
import { AliyunClient, AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/index.js";
import { AliyunClientV2 } from "../../../plugin-lib/aliyun/lib/aliyun-client-v2.js";
@IsTaskPlugin({
@@ -31,7 +31,7 @@ export class AliyunDeployCertToALB extends AbstractTaskPlugin {
},
required: true
})
cert!: CertInfo | number;
cert!: CertInfo | CasCertId | number;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -298,18 +298,25 @@ export class AliyunDeployCertToALB extends AbstractTaskPlugin {
async getAliyunCertId(access: AliyunAccess) {
let certId: any = this.cert;
if (typeof this.cert === "object") {
const certInfo = this.cert as CertInfo;
const casCert = this.cert as CasCertId;
const sslClient = new AliyunSslClient({
access,
logger: this.logger,
endpoint: this.casEndpoint
});
const certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt));
if (certInfo.crt) {
const certName = this.buildCertName(CertReader.getMainDomain(certInfo.crt));
const certIdRes = await sslClient.uploadCertificate({
name: certName,
cert: this.cert
cert: certInfo,
});
certId = certIdRes.certId as any;
}else if (casCert.certId){
certId = casCert.certId;
}
}
return certId;
@@ -2,7 +2,7 @@ import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput
import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert";
import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from "@certd/plugin-lib";
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { AliyunSslClient } from "../../../plugin-lib/aliyun/lib/ssl-client.js";
import { AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/ssl-client.js";
@IsTaskPlugin({
name: "AliyunDeployCertToAll",
@@ -27,7 +27,7 @@ export class AliyunDeployCertToAll extends AbstractTaskPlugin {
},
required: true,
})
cert!: CertInfo | number;
cert!: CertInfo | CasCertId | number;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -155,12 +155,18 @@ export class AliyunDeployCertToAll extends AbstractTaskPlugin {
//
let certId: any = this.cert;
if (typeof this.cert === "object") {
const certInfo = this.cert as CertInfo;
const casCert = this.cert as CasCertId;
if (casCert.certId) {
certId = casCert.certId;
} else {
const certIdRes = await sslClient.uploadCertificate({
name: this.appendTimeSuffix("certd"),
cert: this.cert,
cert: certInfo,
});
certId = certIdRes.certId as any;
}
}
const jobId = await this.createDeployJob(sslClient, certId);
@@ -4,7 +4,7 @@ import {
createRemoteSelectInputDefine
} from "@certd/plugin-lib";
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { AliyunSslClient } from "../../../plugin-lib/aliyun/lib/ssl-client.js";
import { AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/ssl-client.js";
import { CertApplyPluginNames, CertInfo, CertReader } from "@certd/plugin-cert";
import {optionsUtils} from "@certd/basic";
@@ -30,7 +30,7 @@ export class DeployCertToAliyunApig extends AbstractTaskPlugin {
},
required: true,
})
cert!: CertInfo | string;
cert!: CertInfo | CasCertId |number;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -137,12 +137,17 @@ export class DeployCertToAliyunApig extends AbstractTaskPlugin {
logger: this.logger,
region: this.casRegion,
});
const certInfo = this.cert as CertInfo;
const casCert = this.cert as CasCertId;
if (casCert.certId) {
certId = casCert.certId;
} else {
certId = await sslClient.uploadCert({
name: this.buildCertName(CertReader.getMainDomain(this.cert.crt)),
cert: this.cert,
name: this.buildCertName(CertReader.getMainDomain(certInfo.crt)),
cert: certInfo,
});
}
}
const certIdentify = `${certId}-${this.casRegion}`
@@ -1,9 +1,9 @@
import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from '@certd/plugin-lib';
import { CertInfo, createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from '@certd/plugin-lib';
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { optionsUtils } from '@certd/basic';
import { CertApplyPluginNames, CertReader } from "@certd/plugin-cert";
import { AliyunClient, AliyunSslClient } from "../../../plugin-lib/aliyun/lib/index.js";
import { AliyunClient, AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/index.js";
@IsTaskPlugin({
name: 'DeployCertToAliyunCDN',
title: '阿里云-部署证书至CDN',
@@ -43,7 +43,7 @@ export class DeployCertToAliyunCDN extends AbstractTaskPlugin {
template:false,
required: true,
})
cert!: string;
cert!: CertInfo | CasCertId |number;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -113,14 +113,19 @@ export class DeployCertToAliyunCDN extends AbstractTaskPlugin {
let certName = this.appendTimeSuffix(this.certName);
if (typeof this.cert === 'object') {
// @ts-ignore
const certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt))
const certInfo = this.cert as CertInfo;
const casCert = this.cert as CasCertId;
if (casCert.certId) {
certId = casCert.certId;
} else {
certName = this.buildCertName(CertReader.getMainDomain(certInfo.crt))
const certIdRes = await sslClient.uploadCertificate({
name:certName,
cert: this.cert,
cert: certInfo,
});
certId = certIdRes.certId as any;
}
}
const client = await this.getClient(access);
@@ -9,7 +9,7 @@ import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { CertInfo } from '@certd/plugin-cert';
import { CertApplyPluginNames } from '@certd/plugin-cert';
import { optionsUtils } from "@certd/basic";
import { AliyunClient } from "../../../plugin-lib/aliyun/lib/index.js";
import { AliyunClient, CasCertId } from "../../../plugin-lib/aliyun/lib/index.js";
@IsTaskPlugin({
name: 'DeployCertToAliyunDCDN',
title: '阿里云-部署证书至DCDN',
@@ -32,7 +32,7 @@ export class DeployCertToAliyunDCDN extends AbstractTaskPlugin {
},
required: true,
})
cert!: CertInfo | number;
cert!: CertInfo | CasCertId | number;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -103,18 +103,10 @@ export class DeployCertToAliyunDCDN extends AbstractTaskPlugin {
async buildParams(domainName: string) {
const CertName = (this.certName ?? 'certd') + '-' + dayjs().format('YYYYMMDDHHmmss');
if (typeof this.cert !== 'object') {
const certId = this.cert;
this.logger.info('使用已上传的证书:', certId);
return {
DomainName: domainName,
SSLProtocol: 'on',
CertType: 'cas',
CertName: CertName,
CertId: certId,
};
}
let certId: any = this.cert
if (typeof this.cert === 'object') {
const certInfo = this.cert as CertInfo;
if (certInfo.crt) {
this.logger.info('上传证书:', CertName);
const cert: any = this.cert;
return {
@@ -126,6 +118,16 @@ export class DeployCertToAliyunDCDN extends AbstractTaskPlugin {
SSLPri: cert.key,
};
}
}
this.logger.info('使用已上传的证书:', certId);
return {
DomainName: domainName,
SSLProtocol: 'on',
CertType: 'cas',
CertName: CertName,
CertId: certId,
};
}
async doRequest(client: any, params: any) {
const requestOption = {
@@ -5,7 +5,7 @@ import {
createRemoteSelectInputDefine
} from "@certd/plugin-lib";
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { AliyunSslClient } from "../../../plugin-lib/aliyun/lib/ssl-client.js";
import { AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/ssl-client.js";
import { AliyunClientV2 } from "../../../plugin-lib/aliyun/lib/aliyun-client-v2.js";
import dayjs from "dayjs";
@@ -32,7 +32,7 @@ export class AliyunDeployCertToESA extends AbstractTaskPlugin {
},
required: true
})
cert!: CertInfo;
cert!: CertInfo | CasCertId | number;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -117,15 +117,22 @@ export class AliyunDeployCertToESA extends AbstractTaskPlugin {
endpoint: this.casEndpoint
});
certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt));
const certInfo = this.cert as CertInfo;
const casCert = this.cert as CasCertId;
if (casCert.certId) {
certId = casCert.certId;
certName = casCert.certName;
} else {
certName = this.buildCertName(CertReader.getMainDomain(certInfo.crt));
const certIdRes = await sslClient.uploadCertificate({
name: certName,
cert: this.cert
cert: certInfo
});
certId = certIdRes.certId as any;
this.logger.info("上传证书成功", certId, certName);
}
}
return {
certId,
certName
@@ -5,7 +5,7 @@ import {
createRemoteSelectInputDefine
} from "@certd/plugin-lib";
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { AliyunSslClient } from "../../../plugin-lib/aliyun/lib/ssl-client.js";
import { AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/ssl-client.js";
@IsTaskPlugin({
name: "AliyunDeployCertToGA",
@@ -30,7 +30,7 @@ export class AliyunDeployCertToGA extends AbstractTaskPlugin {
},
required: true
})
cert!: CertInfo|number;
cert!: CertInfo|number | CasCertId;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -123,7 +123,7 @@ export class AliyunDeployCertToGA extends AbstractTaskPlugin {
logger: this.logger,
endpoint: this.casEndpoint
});
return await sslClient.uploadCertOrGet(this.cert)
return await sslClient.uploadCertOrGet(this.cert as any)
}
async execute(): Promise<void> {
@@ -6,7 +6,7 @@ import {
} from "@certd/plugin-lib";
import { CertApplyPluginNames} from '@certd/plugin-cert';
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { AliyunClient, AliyunSslClient } from "../../../plugin-lib/aliyun/lib/index.js";
import { AliyunClient, AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/index.js";
import { AliyunClientV2 } from '../../../plugin-lib/aliyun/lib/aliyun-client-v2.js';
@IsTaskPlugin({
name: 'AliyunDeployCertToNLB',
@@ -31,7 +31,7 @@ export class AliyunDeployCertToNLB extends AbstractTaskPlugin {
},
required: true,
})
cert!: CertInfo | number;
cert!: CertInfo | number | CasCertId;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -286,17 +286,25 @@ export class AliyunDeployCertToNLB extends AbstractTaskPlugin {
async getAliyunCertId(access: AliyunAccess) {
let certId: any = this.cert;
if (typeof this.cert === 'object') {
const casCert = this.cert as CasCertId;
if (casCert.certId) {
return casCert.certId;
}
const certInfo = this.cert as CertInfo;
const sslClient = new AliyunSslClient({
access,
logger: this.logger,
endpoint: this.casEndpoint,
});
const certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt))
const certName = this.buildCertName(CertReader.getMainDomain(certInfo.crt))
const certIdRes = await sslClient.uploadCertificate({
name: certName,
cert: this.cert,
cert: certInfo,
});
certId = certIdRes.certId as any;
}
@@ -1,14 +1,13 @@
import { optionsUtils } from "@certd/basic";
import { AbstractTaskPlugin, IsTaskPlugin, Pager, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
import { CertApplyPluginNames, CertInfo } from '@certd/plugin-cert';
import {
createCertDomainGetterInputDefine,
createRemoteSelectInputDefine
} from '@certd/plugin-lib';
import {CertInfo, CertReader} from '@certd/plugin-cert';
import { CertApplyPluginNames} from '@certd/plugin-cert';
import {optionsUtils} from "@certd/basic";
import { isArray } from "lodash-es";
import { AliyunAccess } from '../../../plugin-lib/aliyun/access/index.js';
import { AliyunSslClient } from '../../../plugin-lib/aliyun/lib/index.js';
import { CasCertId } from '../../../plugin-lib/aliyun/lib/index.js';
@IsTaskPlugin({
name: 'DeployCertToAliyunOSS',
title: '阿里云-部署证书至OSS',
@@ -32,7 +31,7 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin {
},
required: true,
})
cert!: CertInfo | string;
cert!: CertInfo | number | CasCertId;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -147,7 +146,6 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin {
this.logger.info('开始部署证书到阿里云OSS');
const access = (await this.getAccess(this.accessId)) as AliyunAccess;
await this.getAliyunCertId(access)
this.logger.info(`bucket: ${this.bucket}, region: ${this.region}, domainName: ${this.domainName}`);
const client = await this.getClient(access);
if (typeof this.domainName === "string"){
@@ -169,11 +167,18 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin {
});
let certStr = ""
if (typeof this.cert === "object" ){
const certInfo = this.cert as CertInfo;
if (certInfo.crt){
certStr = `
<PrivateKey>${this.cert.key}</PrivateKey>
<Certificate>${this.cert.crt}</Certificate>
<PrivateKey>${certInfo.key}</PrivateKey>
<Certificate>${certInfo.crt}</Certificate>
`
}else{
const casCert = this.cert as CasCertId;
certStr = `<CertId>${casCert.certIdentifier}</CertId>`
}
}else {
certStr = `<CertId>${this.cert}-${this.casRegion}</CertId>`
}
@@ -196,34 +201,6 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin {
return res;
}
async getAliyunCertId(access: AliyunAccess) {
let certId: any = this.cert;
let certName: any = this.appendTimeSuffix("certd");
if (typeof this.cert === "object") {
let endpoint = `cas.${this.casRegion}.aliyuncs.com`;
if (this.casRegion === "cn-hangzhou" || !this.casRegion){
endpoint = "cas.aliyuncs.com";
}
const sslClient = new AliyunSslClient({
access,
logger: this.logger,
endpoint: endpoint
});
certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt));
const certIdRes = await sslClient.uploadCertificate({
name: certName,
cert: this.cert
});
certId = certIdRes.certId as any;
this.logger.info("上传证书成功", certId, certName);
}
return {
certId,
certName
};
}
async getClient(access: AliyunAccess) {
// @ts-ignore
@@ -31,7 +31,7 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin {
},
required: true,
})
cert!: CertInfo | number;
cert!: CertInfo | number | CasCertInfo;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -251,13 +251,22 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin {
if (typeof this.cert === 'object') {
const name = this.appendTimeSuffix('certd');
const casCert = this.cert as CasCertInfo;
if (casCert.certIdentifier) {
certId = casCert.certId;
} else {
const cert = this.cert as CertInfo;
const certIdRes = await sslClient.uploadCertificate({
name: name,
cert: this.cert,
cert: cert,
});
certId = certIdRes.certId as any;
}
}
return await sslClient.getCertInfo(certId);
}
@@ -5,7 +5,7 @@ import {
createRemoteSelectInputDefine
} from "@certd/plugin-lib";
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
import { AliyunClient, AliyunSslClient } from "../../../plugin-lib/aliyun/lib/index.js";
import { AliyunClient, AliyunSslClient, CasCertInfo } from "../../../plugin-lib/aliyun/lib/index.js";
@IsTaskPlugin({
name: 'AliyunDeployCertToWaf',
@@ -30,7 +30,7 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin {
},
required: true,
})
cert!: CertInfo | number;
cert!: CertInfo | number | CasCertInfo;
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
certDomains!: string[];
@@ -152,11 +152,17 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin {
endpoint: this.casEndpoint,
});
const cert = this.cert as CertInfo;
if (cert.crt) {
const certIdRes = await sslClient.uploadCertificate({
name: this.buildCertName(CertReader.getMainDomain(this.cert.crt)),
cert: this.cert,
name: this.buildCertName(CertReader.getMainDomain(cert.crt)),
cert: cert,
});
certId = certIdRes.certId as any;
}else {
const casCert = this.cert as CasCertInfo;
certId = casCert.certId;
}
}
const client = await this.getWafClient(access);
@@ -1,7 +1,7 @@
import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput, TaskOutput } from '@certd/pipeline';
import { CertApplyPluginNames, CertReader } from "@certd/plugin-cert";
import { AliyunAccess } from '../../../plugin-lib/aliyun/access/index.js';
import { AliyunSslClient } from '../../../plugin-lib/aliyun/lib/index.js';
import { AliyunSslClient, CasCertId } from '../../../plugin-lib/aliyun/lib/index.js';
/**
* 华东1(杭州) cn-hangzhou cas.aliyuncs.com cas-vpc.cn-hangzhou.aliyuncs.com
* 马来西亚(吉隆坡) ap-southeast-3 cas.ap-southeast-3.aliyuncs.com cas-vpc.ap-southeast-3.aliyuncs.com
@@ -78,7 +78,7 @@ export class UploadCertToAliyun extends AbstractTaskPlugin {
@TaskOutput({
title: '上传成功后的阿里云CertId',
})
aliyunCertId!: string;
aliyunCertId!: CasCertId;
async onInstance() {}
@@ -126,18 +126,25 @@ export class AliyunSslClient {
}
}
async uploadCertOrGet(cert: CertInfo | number ) :Promise<CasCertId>{
async uploadCertOrGet(cert: CertInfo | number | CasCertId ) :Promise<CasCertId>{
if (typeof cert === "object") {
const casCert = cert as CasCertId;
if (casCert.certId) {
return casCert;
}
const certInfo = cert as CertInfo;
// 上传证书到阿里云
this.logger.info(`开始上传证书`);
const certName = CertReader.buildCertName(cert);
const certName = CertReader.buildCertName(certInfo);
const res = await this.uploadCertificate({
name: certName,
cert: cert
cert: certInfo
});
this.logger.info("上传证书成功", JSON.stringify(res));
return res
}
//number类型
const certId = cert as any;
let certName: any = utils.string.appendTimeSuffix(certId);
const certIdentifier = this.getCertIdentifier(certId);