【问题标题】:Conditional Code pipeline based on upstream action variable?基于上游动作变量的条件代码管道?
【发布时间】:2021-12-07 19:47:59
【问题描述】:

我知道我可以基于 Condition 有条件地执行 aws codepipeline 操作,但我想将操作执行基于动态设置的变量。

这可能吗?

这是我的用例: 我正在使用具有多个工作区的 monorepo。每个微服务一个。我有一个 lambda 函数,可以确定每次代码推送中修改了哪些服务源代码。它使用此信息设置一个变量。基于这个变量,我想有条件地调用微服务代码构建项目。

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: aws-codepipeline aws-serverless


【解决方案1】:

我知道我可以根据以下条件有条件地执行 aws codepipeline 操作 一个条件

我会在此处进行区分,您可以使用 cloudformation 修改管道定义并重新部署管道。

代码管道偏向于针对单个 repo 进行基于主干的开发,因此您试图与之抗衡会使您的生活变得困难。

据我所知,如果你必须这样做:

  1. 将条件逻辑移动到每个代码构建项目中,它们会运行,但会根据条件逻辑执行或不执行某些操作。

  2. 管道可以自行更新。

注意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”将重新部署堆栈。如果检测到更改,则会更新管道定义并重新启动管道。

理论上上述方法可行。

【讨论】:

  • 谢谢@onan-cunningham。我尝试做一些类似于你建议的事情。实施起来很痛苦,但让它起作用了。每次提交后看到管道自动转换本身很酷。我使用 lambda 来触发具有更新参数的 cloudformation 部署(相同模板)。不幸的是,这个解决方案似乎有问题。如果第二次提交进入管道并在前一次仍在执行时对其进行转换,那么前一次提交将被删除 - 非常类似于。它使各种环境处于不一致的状态。 :-( 哦,好吧
  • 我正在使用 CodePipeline 逆流而上。 CircleCi 让做我需要的事情变得非常容易,所以我正在切换github.com/CircleCI-Public/api-preview-docs/blob/path-filtering/…。另外,我喜欢不要让 cloudformation 堆栈和 s3 存储桶与 ci/cd 和应用程序的东西混在一起。
猜你喜欢
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多