如何阻止CloudFormation栈部署后CodeBuild项目自动运行?
以下几种方法可以实现手动触发CodeBuild,避免部署CloudFormation栈时自动执行构建:
添加手动审批步骤拦截自动执行
在CodePipeline的Build阶段之前,插入一个手动审批动作。只有当你手动批准后,Pipeline才会继续执行CodeBuild。在CloudFormation模板的Pipeline阶段配置中添加如下Action:- Name: ManualApprovalForBuild ActionTypeId: Category: Approval Owner: AWS Provider: Manual Version: '1' RunOrder: 1把这个Action放在Build Action的前面(RunOrder设为1,Build Action的RunOrder设为2),这样每次Pipeline运行到此处会暂停,等待手动确认后才会触发构建。
禁用源变更的自动触发
如果你的CodePipeline是由代码仓库(如CodeCommit)或S3存储桶的变更自动触发的,直接关闭自动轮询即可。在CloudFormation的源阶段配置中设置PollForSourceChanges: false:Sources: - Name: MySourceRepo ActionTypeId: Category: Source Owner: AWS Provider: CodeCommit Version: '1' Configuration: RepositoryName: my-repository BranchName: main PollForSourceChanges: false这样Pipeline只会在你手动点击"Release change"时运行,自然不会自动触发CodeBuild。
通过条件参数控制Build阶段的启用
在CloudFormation模板中添加一个布尔类型的参数(比如EnableBuildAutoTrigger),默认设为false,然后用Condition判断是否将Build Action添加到Pipeline中。部署完成后,再更新参数为true或者手动添加Build阶段,实现手动触发的控制。
示例条件配置:Parameters: EnableBuildAutoTrigger: Type: Boolean Default: false Conditions: ShouldAddBuildAction: !Equals [ !Ref EnableBuildAutoTrigger, true ] Resources: MyPipeline: Type: AWS::CodePipeline::Pipeline Properties: Stages: - Name: BuildStage Actions: - !If - ShouldAddBuildAction - Name: MyBuildAction ActionTypeId: Category: Build Owner: AWS Provider: CodeBuild Version: '1' Configuration: ProjectName: !Ref MyCodeBuildProject - !Ref AWS::NoValue清空CodeBuild的触发规则
在CloudFormation定义CodeBuild项目时,显式设置Triggers为空对象,确保没有额外的自动触发规则(虽然集成到CodePipeline时主要由Pipeline控制触发,但这个设置可以避免意外的自动触发):Resources: MyCodeBuildProject: Type: AWS::CodeBuild::Project Properties: # 其他项目配置(如环境、构建规范等) Triggers: {}
内容的提问来源于stack exchange,提问作者fgonzalez

