如果我通过 CloudFormation 部署 AWS,有什么方法可以阻止 AWS 自动启动 CodePipeline?
Is there any way to stop AWS from starting CodePipeline automatically if I deploy it via CloudFormation?
如果您通过 CloudFormation 创建 CodePipeline。它会自动启动,这可能是个问题,因为管道可以重写相同的堆栈...
有什么方法可以禁用此行为吗?
谢谢。
可悲的是,这似乎没有办法。 Docs 明确指出新创建的管道立即启动 运行ning:
Now that you've created your pipeline, you can view it in the console. The pipeline starts to run after you create it.
最初的运行总会发生。后续 运行 取决于您的源操作。例如,如果您使用 CodeCommit 作为源,您可以 禁用触发管道的 CloudWatch Event。
因此,如果您想在项目中使用 CodePipeline,则必须对其进行设计,使其不会因立即启动而导致任何问题。
根据 Marcin 的评论,您似乎可以采用两种方法来限制管道的 运行。
直接在 Source[=24] 之后创建 disabled StageTransition 或 Manual Approval 阶段=]阶段。这将阻止管道执行除获取不会影响或无法重写任何内容的源之外的任何其他操作。
或者,如果您的源阶段来自存储库,您可以选择通过禁用 cloudformation 模板中的 PollForSourceChanges 参数来自行处理管道触发器。
Pipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
Name: *NAME*
RoleArn: *IAMROLE*
Stages:
- Name: Source
Actions:
- Name: CodeCommitSourceAction
RunOrder: 1
ActionTypeId:
Category: Source
Provider: CodeCommit
Owner: AWS
Version: '1'
OutputArtifacts:
- Name: Source
Configuration:
RepositoryName: *REPOSITORYNAME*
BranchName: *BRANCH*
PollForSourceChanges: "false" #prevents codepipeline polling repository for changes.
所以正确答案是...
- 在首次部署之前提交您的代码
- 仅部署管道
- 让代码管道做它的事
99% 的案例它会比您的机器更快完成。
有同样的问题,我不想在管道创建时启动管道(这是默认行为)。
我找到的最佳解决方案是:
- 创建一个捕获管道执行的 EventBridge 规则
管道创建
- 从触发的 lambda 停止管道执行
规则如下:
{
"source": ["aws.codepipeline"],
"detail-type": ["CodePipeline Pipeline Execution State Change"],
"detail": {
"state": ["STARTED"],
"execution-trigger": {
"trigger-type": ["CreatePipeline"]
}
}
}
效果很好
如果您通过 CloudFormation 创建 CodePipeline。它会自动启动,这可能是个问题,因为管道可以重写相同的堆栈...
有什么方法可以禁用此行为吗?
谢谢。
可悲的是,这似乎没有办法。 Docs 明确指出新创建的管道立即启动 运行ning:
Now that you've created your pipeline, you can view it in the console. The pipeline starts to run after you create it.
最初的运行总会发生。后续 运行 取决于您的源操作。例如,如果您使用 CodeCommit 作为源,您可以 禁用触发管道的 CloudWatch Event。
因此,如果您想在项目中使用 CodePipeline,则必须对其进行设计,使其不会因立即启动而导致任何问题。
根据 Marcin 的评论,您似乎可以采用两种方法来限制管道的 运行。
直接在 Source[=24] 之后创建 disabled StageTransition 或 Manual Approval 阶段=]阶段。这将阻止管道执行除获取不会影响或无法重写任何内容的源之外的任何其他操作。
或者,如果您的源阶段来自存储库,您可以选择通过禁用 cloudformation 模板中的 PollForSourceChanges 参数来自行处理管道触发器。
Pipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: *NAME* RoleArn: *IAMROLE* Stages: - Name: Source Actions: - Name: CodeCommitSourceAction RunOrder: 1 ActionTypeId: Category: Source Provider: CodeCommit Owner: AWS Version: '1' OutputArtifacts: - Name: Source Configuration: RepositoryName: *REPOSITORYNAME* BranchName: *BRANCH* PollForSourceChanges: "false" #prevents codepipeline polling repository for changes.
所以正确答案是...
- 在首次部署之前提交您的代码
- 仅部署管道
- 让代码管道做它的事
99% 的案例它会比您的机器更快完成。
有同样的问题,我不想在管道创建时启动管道(这是默认行为)。
我找到的最佳解决方案是:
- 创建一个捕获管道执行的 EventBridge 规则 管道创建
- 从触发的 lambda 停止管道执行
规则如下:
{
"source": ["aws.codepipeline"],
"detail-type": ["CodePipeline Pipeline Execution State Change"],
"detail": {
"state": ["STARTED"],
"execution-trigger": {
"trigger-type": ["CreatePipeline"]
}
}
}
效果很好