【发布时间】:2022-11-12 03:27:53
【问题描述】:
是否可以将现有的 CDK 应用程序包装到管道中,选择为应用程序创建管道,但如果只想在本地部署应用程序,也可以执行常规的 cdk deploy -all?
我们当前的主应用程序看起来像这样(过于简化,但只是为了给出想法):
const app = describeApp()
const coreStack = new CoreStack(app, 'CoreStack')
const domainConfig = new DomainConfig(app, 'DomainConfig')
...
然后我想做的是在底部添加一些内容:
if (process.env.CREATE_PIPELINE) {
const pipelineApp = new App();
new PipelineStack(pipelineApp, 'PipelineStack', app);
}
使用 PipelineStack 类可以有效地将主应用程序作为阶段添加到管道中,例如:
export class PipelineStack extends Stack {
constructor(scope: Construct, id: string, app: App, props?: StackProps) {
super(scope, id, props);
const repo = codeCommit.Repository.fromRepositoryName(this, 'Repo', 'XXX')
const pipeline = new CodePipeline(this, 'Pipeline', {
pipelineName: 'Pipeline',
synth: new CodeBuildStep('SynthStep', {
input: CodePipelineSource.codeCommit(repo, 'YYY'),
installCommands: [
'npm install -g yarn',
'cd app',
'yarn install',
'yarn global add aws-cdk'
],
commands: [
'yarn build',
'cdk synth'
]
}
)
});
pipeline.addStage(app)
}
}
这目前抱怨我的舞台没有舞台名称,但如果我添加黑客:
// @ts-ignore
app.stageName = 'DeployApp'
然后我在Error: Pipeline stack which uses cross-environment actions must have an explicitly set region 周围出现错误。
我觉得必须有一种更直接的方法来执行此操作,但无需重写我的主应用程序类以仅允许我通过这个新管道进行部署?
【问题讨论】: