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

如何配置CDK Pipeline实现GitHub提交后自动部署S3静态网站?

CDK Pipeline配置指南:GitHub触发+S3静态网站自动部署

1. 配置代码变更自动触发流水线

CDK Pipelines对接GitHub时,需通过GitHub个人访问令牌(PAT)完成权限认证并自动创建Webhook,实现代码提交触发流水线:

  • 前往GitHub生成具备repo和admin:repo_hook权限的PAT
  • 将该令牌存入AWS Secrets Manager,命名例如github-token
  • 在CDK代码中引用该密钥作为GitHub源的认证凭据,部署栈后CDK会自动为目标仓库创建Webhook,后续指定分支(如main)的代码提交将直接触发流水线

2. 将仓库内容部署到S3桶

通过在流水线中添加部署步骤,执行aws s3 sync命令同步仓库静态文件到目标S3桶:

  • 确保流水线执行角色拥有S3桶的PutObject、DeleteObject、ListBucket权限
  • 根据项目结构指定静态文件所在目录(如./public或根目录.)
  • 在流水线阶段中添加ShellStep执行同步命令

修改后的完整代码示例

import * as cdk from "aws-cdk-lib";
import * as pipelines from "aws-cdk-lib/pipelines";
import { Construct } from "constructs";
import * as iam from "aws-cdk-lib/aws-iam";

export class WorkshopPipeLineStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 配置GitHub源,引入SecretsManager中的令牌
    const source = pipelines.CodePipelineSource.gitHub(
      "kasukur/s3-website",
      "main",
      {
        authentication: cdk.SecretValue.secretsManager("github-token"),
      }
    );

    // 创建流水线,包含Synth步骤
    const pipeline = new pipelines.CodePipeline(this, "MyPipeline", {
      synth: new pipelines.ShellStep("Synth", {
        input: source,
        commands: [
          "npm install",
          "npx cdk synth"
        ],
        env: {
          COMMIT_ID: source.sourceAttribute("CommitId"),
        },
      }),
    });

    // 引入目标S3桶(若桶由CDK创建,可直接引用栈内资源)
    const targetBucket = cdk.aws_s3.Bucket.fromBucketName(this, "TargetBucket", "your-s3-static-bucket-name");

    // 添加部署阶段,同步静态文件到S3
    pipeline.addStage(new cdk.Stage(this, "DeployStaticSite", {
      env: props?.env
    })).addPost(new pipelines.ShellStep("SyncToS3", {
      commands: [
        // 替换为你的静态文件目录
        `aws s3 sync ./public s3://${targetBucket.bucketName} --delete`
      ],
      // 为步骤添加S3操作权限
      rolePolicyStatements: [
        new iam.PolicyStatement({
          actions: ["s3:PutObject", "s3:DeleteObject", "s3:ListBucket"],
          resources: [targetBucket.bucketArn, `${targetBucket.bucketArn}/*`]
        })
      ]
    }));
  }
}

关键注意事项

  • 替换代码中的your-s3-static-bucket-name为实际S3桶名称
  • 若静态文件存放在仓库根目录,将./public改为.
  • 首次部署前需确保本地已配置AWS credentials,且具备创建Pipeline、Secrets Manager等资源的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:05:21