如何通过 CDK 禁用代码管道中的转换?
How can I disable transition in codepipeline via CDK?
我正在使用 nodejs CDK 将代码管道部署到 AWS。下面是代码:
const pipeline = new codepipeline.Pipeline(this, this.projectName, {
pipelineName: this.projectName,
role: this.pipelineRole,
stages,
artifactBucket: s3.Bucket.fromBucketName(
this,
'deploymentS3Bucket',
cdk.Fn.importValue(this.s3Bucket)
),
});
它在 stages
数组中定义了所有阶段。我的问题是如何在此管道的一个阶段中禁用过渡?
我尝试了以下代码:
const primaryDeployStage: codepipeline.CfnPipeline = pipeline.node.findChild('Approve') as codepipeline.CfnPipeline;
const stageTransitionProperty: codepipeline.CfnPipeline.StageTransitionProperty = {
reason: 'reason',
stageName: 'stageName',
};
primaryDeployStage. addPropertyOverride('DisableInboundStageTransitions', stageTransitionProperty);
但显示 no such method addOverride
错误。
从 CDK v2.1 开始,codepipeline.Pipeline
class 不公开此 属性,但它所构建的 Level1 CfnPipeline
class 公开(github issue).
选项 1:快速而肮脏的解决方法: 进入 codepipeline.Pipeline
的实现以获取对其 CfnPipeline
的引用(这是您的方法尝试过):
// pipeline is a codepipeline.Pipeline
// DANGER - 'Resource' is the CfnPipeline construct's id, assigned in the Pipeline's constructor implementation
const cfnPipeline = pipeline.node.findChild('Resource') as codepipeline.CfnPipeline;
cfnPipeline.addPropertyOverride('DisableInboundStageTransitions', [
{
StageName: 'Stage2',
Reason: 'No particular reason',
},
]);
选项 2:实例化 Level1 CfnPipeline, which accepts a disableInboundStageTransitions 道具。
// CfnPipelineProps
disableInboundStageTransitions: [{
reason: 'reason',
stageName: 'stageName',
}],
编辑:说明Resource
是CfnPipeline
子节点的名称
我们通过将阶段名称传递给 L1 CfnPipeline
来禁用阶段转换。方法#2 通过创建一个来直接做到这一点。
但我们宁愿使用 L2 Pipeline
,因为它更容易。这是方法#1,您正在采用的方法。幸运的是,我们的 pipeline
有一个名为 'Resource' 的 CfnPipeline
子节点。我们怎么知道呢?我们看在
Pipeline constructor's source code on github。
一旦我们使用 pipeline.node.findChild('Resource')
引用了 CfnPipeline
,我们将禁用的阶段作为 属性 覆盖添加到它,采用与 #2 中相同的 {StageName: Reason:}
格式。
我正在使用 nodejs CDK 将代码管道部署到 AWS。下面是代码:
const pipeline = new codepipeline.Pipeline(this, this.projectName, {
pipelineName: this.projectName,
role: this.pipelineRole,
stages,
artifactBucket: s3.Bucket.fromBucketName(
this,
'deploymentS3Bucket',
cdk.Fn.importValue(this.s3Bucket)
),
});
它在 stages
数组中定义了所有阶段。我的问题是如何在此管道的一个阶段中禁用过渡?
我尝试了以下代码:
const primaryDeployStage: codepipeline.CfnPipeline = pipeline.node.findChild('Approve') as codepipeline.CfnPipeline;
const stageTransitionProperty: codepipeline.CfnPipeline.StageTransitionProperty = {
reason: 'reason',
stageName: 'stageName',
};
primaryDeployStage. addPropertyOverride('DisableInboundStageTransitions', stageTransitionProperty);
但显示 no such method addOverride
错误。
从 CDK v2.1 开始,codepipeline.Pipeline
class 不公开此 属性,但它所构建的 Level1 CfnPipeline
class 公开(github issue).
选项 1:快速而肮脏的解决方法: 进入 codepipeline.Pipeline
的实现以获取对其 CfnPipeline
的引用(这是您的方法尝试过):
// pipeline is a codepipeline.Pipeline
// DANGER - 'Resource' is the CfnPipeline construct's id, assigned in the Pipeline's constructor implementation
const cfnPipeline = pipeline.node.findChild('Resource') as codepipeline.CfnPipeline;
cfnPipeline.addPropertyOverride('DisableInboundStageTransitions', [
{
StageName: 'Stage2',
Reason: 'No particular reason',
},
]);
选项 2:实例化 Level1 CfnPipeline, which accepts a disableInboundStageTransitions 道具。
// CfnPipelineProps
disableInboundStageTransitions: [{
reason: 'reason',
stageName: 'stageName',
}],
编辑:说明Resource
是CfnPipeline
子节点的名称
我们通过将阶段名称传递给 L1 CfnPipeline
来禁用阶段转换。方法#2 通过创建一个来直接做到这一点。
但我们宁愿使用 L2 Pipeline
,因为它更容易。这是方法#1,您正在采用的方法。幸运的是,我们的 pipeline
有一个名为 'Resource' 的 CfnPipeline
子节点。我们怎么知道呢?我们看在
Pipeline constructor's source code on github。
一旦我们使用 pipeline.node.findChild('Resource')
引用了 CfnPipeline
,我们将禁用的阶段作为 属性 覆盖添加到它,采用与 #2 中相同的 {StageName: Reason:}
格式。