繁体   English   中英

CDK 在 Codepipeline 中的使用

[英]Use of CDK in Codepipeline

x我有一个要求,我需要在舞台内执行某些 CDK 命令。 我不确定如何在舞台上使用它

尝试了某些事情,我所能理解的是,您可以在一个阶段内运行某些 Shell 命令。

 with open('<some-config.json>') as f:
            lines = f.readlines()
        print(lines)
        string_param = aws_ssm.StringParameter(
            self, "StringParameterWithoutSlash",
            parameter_name="<some-config>",
            string_value="{}".format(lines)
        )

我有以下 CDK 管道。

       pipeline.add_stage(
            stage_name="Source",
            actions=[
                codepipeline_actions.CodeCommitSourceAction(
                    action_name="CodeCommit-Source",
                    repository=code_repo,
                    branch="master",
                    output=source_output,
                )
            ],
        )
        
        pipeline.add_stage(
            stage_name="Build-Test",
            actions=[
                codepipeline_actions.CodeBuildAction(
                    action_name="Build-Test",
                    project=build_project,
                    input=source_output,
                    outputs=[build_output],
                )
            ],
        )

我想在 CDK 管道内执行某些 cdk 命令,以便在执行管道时运行 cdk 命令。

尝试了某些事情,但找不到我可以使用的任何方法。

您不能直接从codepipeline.Pipeline部署 CDK 构造。 这是pipelines.CodePipeline Construct 的特点。 不过,交换管道不是必需的。

这是一个保留 OP 的codepipeline.Pipeline的解决方案。 它避免在管道中部署新资源。

  1. ssm.Parameter构造添加到 CDK 堆栈。 在合成时,名称是已知的,值是虚拟占位符。 实际参数值稍后将由在管道执行期间调用的 Lambda 设置。
  2. Function构造添加到 CDK 堆栈。 lambda 将作为管道操作调用。 lambda 应该有一个环境变量PARAMS_JSON ,调用时它将通过它接收参数值。 Lambda 的工作是调用 boto3 put_parameter() API 以使用环境变量中的值覆盖参数值。
  3. 在管道操作中使用 shell 命令设置PARAMS_JSON的值。 <some-config.json>将在此时从输入工件中可用。
  4. 添加一个引用您在上面添加的FunctionFunction 您将第 3 步和第 4 步放置在管道中的确切位置将取决于您的用例的详细信息。

这种方法的一个优点是参数和 Lambda 与 Stack 生命周期相关联。 参数将与 Stack 一起创建、更新和销毁,即使 Stack 不知道参数值。

在管道内运行任何命令的最佳方式如下所示。

  ssm_deploy_project = codebuild.PipelineProject(
            self, 
            "Jazz Config Deploy",
            environment=codebuild.BuildEnvironment(
                build_image=codebuild.LinuxBuildImage.AMAZON_LINUX_2_2,
            ),
            build_spec=codebuild.BuildSpec.from_object(
            {
            "version": "0.2",
            "phases": {
                "build": {
                    "commands": 'aws ssm put-parameter --name "config-jazz" --overwrite --type String --region eu-central-1 --value "$(cat config-jazz.json)"'
                }
            }
            }
             )
            )

更新 pipeline.py 文件以添加新阶段

   pipeline.add_stage(
                    stage_name="Deploy_Jazz_Config",
                    actions=[
                        codepipeline_actions.CodeBuildAction(
                            action_name="Jazz-Config-Deploy",
                            project=ssm_deploy_project,
                            input=source_output,
                        )
                    ],
                )

这将从 cdk 执行 aws cli。

使用它的好处是我们不必管理单独的 buildspec.yml 文件来执行某些 cli 命令

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM