我正在尝试使用 codepipeline 来构建/部署 ECS/EC2 应用程序及其必要的工件 - docker 映像。
到目前为止,我在 cdk 中有一个非常简单的设置,它在 CodePipeline 控制台 UI 中创建了 3 个阶段。源 -> 构建 -> 更新管道。
第一步获取 cdk 代码,第二步在其上运行
synth
,最后一步应该更改管道(如果其 CDK 代码已更改)。这是执行此操作的代码
bin/my-app.ts
...
const app = new cdk.App()
const env = { account: 'number', region: 'region' }
new MyPipeline(app, `pipeline`, { env })
lib/pipeline.ts
...
const pipeline = new CodePipeline(this, 'my-pipeline', {
pipelineName: 'my-pipeline',
synth: new ShellStep('Synthesize_CDK_Code', {
input: CodePipelineSource.gitHub(my-infra-repo, 'my-main-branch', { authentication: my-token}),
commands: [
'npm install -g aws-cdk',
'npm install',
'npx cdk synth'
]
}),
})
当我第一次手动部署它时,管道堆栈创建成功并自动触发管道。它正确获取基础代码,正确构建它,然后 UpdatePipeline 步骤失败。
当我检查该步骤时,我发现它无法更新管道云信息堆栈。如果我查看堆栈,错误是
my-pipeline already exists in stack ...
。嗯,是的,它已经存在,刚刚创建,但是为什么 updatePipeline 试图重新创建堆栈?第一次部署应该以特殊方式完成吗?
这里的问题是,我使用
cdk cli
手动部署更改,但管道的自我变异步骤是基于 我的 guithub 存储库中的 CDK 代码进行管道更改。
由于 我的 github 存储库仍然有使用
Pipeline
构造的旧代码,它尝试重新创建它但失败了,因为两者具有相同的逻辑 id。