You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在@aws-cdk/pipelines中关联ApplicationBuild阶段与流水线部署

实现方案

可以按照以下步骤完成ApplicationBuild阶段与Fargate部署环节的关联,同时实现第二个应用仓库推送触发流水线的需求:

1. 配置流水线多源触发

先将应用源码仓库作为第二个源接入流水线,配置推送自动触发规则:

import * as cdk from 'aws-cdk-lib';
import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
import * as cdkpipelines from 'aws-cdk-lib/pipelines';

// 原有CDK基础设施仓库源
const cdkRepoSource = cdkpipelines.CodePipelineSource.gitHub('你的组织/CDK仓库名', 'master');
// 新增应用源码仓库源
const appRepoSource = cdkpipelines.CodePipelineSource.gitHub('你的组织/应用仓库名', 'master', {
  trigger: cdkpipelines.GitHubTrigger.WEBHOOK,
});

// 初始化流水线
const pipeline = new cdkpipelines.CodePipeline(this, '自变更流水线', {
  synth: new cdkpipelines.ShellStep('Synth', {
    input: cdkRepoSource,
    commands: ['npm ci', 'npm run build', 'npx cdk synth'],
  }),
});

2. 调整ApplicationBuild阶段输出镜像信息

在ApplicationBuild阶段的buildspec末尾,将构建完成的镜像URI写入JSON文件作为输出制品,供后续部署阶段读取:

// 定义构建阶段输出制品,存储镜像信息
const buildOutputArtifact = new codepipeline.Artifact();

const appBuildStep = new cdkpipelines.CodeBuildStep('ApplicationBuild', {
  input: appRepoSource,
  buildEnvironment: {
    privileged: true, // 构建Docker镜像必须开启特权模式
  },
  commands: [
    // 你原有buildspec中的构建、打标、推送ECR逻辑
    'echo "构建完成的镜像URI为: xxx.dkr.ecr.xxx.amazonaws.com/xxx:${CODEBUILD_RESOLVED_SOURCE_VERSION}"',
    // 将镜像信息写入输出文件
    'echo {\\"imageUri\\":\\"xxx.dkr.ecr.xxx.amazonaws.com/xxx:${CODEBUILD_RESOLVED_SOURCE_VERSION}\\"} > imageDetails.json',
  ],
  primaryOutputDirectory: '.',
  outputs: [buildOutputArtifact],
});

// 把构建阶段加入流水线
pipeline.addStage(appBuildStep);

3. 关联构建输出与Fargate部署阶段

自定义部署Stage接收镜像URI参数,从构建输出的JSON文件中读取镜像地址注入到Fargate服务的任务定义中:

// 自定义Fargate服务部署Stage
class FargateDeployStage extends cdk.Stage {
  constructor(scope: cdk.IConstruct, id: string, props: { imageUri: string }) {
    super(scope, id, props);
    // 你的Fargate服务Stack,接收imageUri参数更新任务定义
    new FargateServiceStack(this, 'Fargate服务栈', {
      imageUri: props.imageUri,
    });
  }
}

// 把部署阶段加入流水线,关联构建输出的镜像信息
pipeline.addStage(new FargateDeployStage(this, '生产环境部署', {
  imageUri: cdkpipelines.FileSet.artifact(buildOutputArtifact).readJson('imageDetails.json').imageUri,
}));

注意事项

  • 需给ApplicationBuild阶段的CodeBuild角色授予ECR镜像推送权限
  • 需给流水线执行角色授予ECS任务定义更新、Fargate服务滚动部署的对应权限
  • 若使用CodeCommit、BitBucket等其他代码托管服务,替换对应的Source构造即可

内容的提问来源于stack exchange,提问作者sisyphushappy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:54:05