aws-codepipeline - 基于上游动作变量的条件代码管道?
问题描述
我知道我可以基于 Condition 有条件地执行 aws codepipeline 操作,但我想将操作执行基于动态设置的变量。
这可能吗?
这是我的用例:我正在使用具有多个工作区的 monorepo。每个微服务一个。我有一个 lambda 函数,它可以确定在每次代码推送中修改了哪些服务源代码。它使用此信息设置一个变量。基于这个变量,我想有条件地调用微服务代码构建项目。
解决方案
我知道我可以基于 Condition 有条件地执行 aws codepipeline 操作
我会在这里做出区分,您可以使用 cloudformation 修改管道定义,并重新部署管道。
代码管道偏向于基于主干的单个 repo 开发,所以你试图反对它,让你的生活变得困难。
据我所知,如果你必须这样做:
将条件逻辑移动到每个代码构建项目中,它们会运行,但会根据条件逻辑执行或不执行某些操作。
管道可以自我更新。
注意RestartExecutionOnUpdate设置了一个条件。
Pipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
RestartExecutionOnUpdate: !If [ RestartPipelineOnUpdate, true, false ]
RoleArn: !ImportValue CodePipelineRoleArn
Name: !Ref CodePipelineName
然后管道可以有一个动作,用它自己的定义部署堆栈 - 非常元。
- !If
- ShouldUpatePipelineStackOnChange
- Name: UpdatePipeline
Actions:
- Name: CreateChangeSet
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: "1"
Configuration:
ActionMode: CREATE_UPDATE
StackName: !Ref AWS::StackName
TemplatePath: !Sub ${PipelineCodeArtifactName}::${ThisTemplateName}
Capabilities: CAPABILITY_NAMED_IAM
RoleArn: !GetAtt PipelineStackCloudFormationExecutionRole.Arn
InputArtifacts:
- Name: !Sub ${PipelineCodeArtifactName}
RunOrder: 1
- !Ref AWS::NoValue
如果你有类似的东西:
- Cloudformation 参数在控制代码构建项目是否运行的参数存储中设置为动态值。
- 管道调用设置这些参数值的 Lambda。
- Lambda 在“UpdatePipeline”操作之前运行。
“UpdatePipeline”将重新部署堆栈。如果检测到更改,管道定义将得到更新,管道将重新启动。
理论上,上述方法可以工作。
推荐阅读
- karate - 空手道:当我想将值设置为 $..somewhereInJsonPath 我得到路径不能以'结尾
- javascript - 从 javascript 调用 URL 处理程序
- c# - 当我的调试输出持续一秒时我该怎么办?
- java - ORA-29532: Java 调用被未捕获的 Java 异常终止: java.lang.NoClassDefFoundError
- javascript - 正则表达式使搜索建议像谷歌或亚马逊一样粗体
- excel - 根据另一个表excel中的值替换列的文本
- angular - 如果有 401 响应,角度拦截器会注销应用程序吗?
- angular - 如何在 Angular6 中执行自动滚动列表?
- css - 我需要什么来更改我的网站的响应
- python - 使用 Tensorflow Leaky Relu 的深度神经网络在从 mnist 数据集更改为 csv 读取数据文件时给出准确度 0