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 结构的特点。不过,不需要交换管道。
这是一个保留 OP codepipeline.Pipeline
的解决方案。它避免了在管道中部署新资源。
- 将
ssm.Parameter
构造添加到 CDK 堆栈。在 synth-time 处,名称是已知的,值是虚拟占位符。实际参数值稍后将由管道执行期间调用的 Lambda 设置。
- 向 CDK 堆栈添加一个
Function
结构。 lambda 将作为管道操作调用。 lambda 应该有一个环境变量 PARAMS_JSON
,在调用时它将通过它接收参数值。 Lambda 的工作是调用 boto3 put_parameter() API 以使用环境变量中的值覆盖参数值。
- 在管道操作中使用 shell 命令设置
PARAMS_JSON
的值。 <some-config.json>
此时可从输入工件中获得。
- 添加一个 LambdaInvokeAction 来引用您在上面添加的
Function
。您在管道中放置步骤 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 命令
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 结构的特点。不过,不需要交换管道。
这是一个保留 OP codepipeline.Pipeline
的解决方案。它避免了在管道中部署新资源。
- 将
ssm.Parameter
构造添加到 CDK 堆栈。在 synth-time 处,名称是已知的,值是虚拟占位符。实际参数值稍后将由管道执行期间调用的 Lambda 设置。 - 向 CDK 堆栈添加一个
Function
结构。 lambda 将作为管道操作调用。 lambda 应该有一个环境变量PARAMS_JSON
,在调用时它将通过它接收参数值。 Lambda 的工作是调用 boto3 put_parameter() API 以使用环境变量中的值覆盖参数值。 - 在管道操作中使用 shell 命令设置
PARAMS_JSON
的值。<some-config.json>
此时可从输入工件中获得。 - 添加一个 LambdaInvokeAction 来引用您在上面添加的
Function
。您在管道中放置步骤 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 命令