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

如何在CloudFormation模板中引用CodeCommit默认输出存储位置

结论

完全可以实现,不需要硬编码任何参数,优先推荐模板内直接拼接路径的方案,稳定性更高。

方案1:CloudFormation模板直接拼接路径前缀

你需要的目标路径前半段(存储桶名+截断至20字符的流水线名)可通过CloudFormation内置函数直接计算,无需解析动态生成的源路径:

  1. 先将流水线名称、流水线存储桶定义为模板参数/全局变量,避免硬编码:
Parameters:
  PipelineName:
    Type: String
    Default: Win-UrgentProject-Dev
  PipelineBucket:
    Type: String
    Default: pipelines-123456
  1. 用内置函数实现和AWS规则完全一致的流水线名称20字符截断:
Resources:
  # 你可以将截断后的名称存为导出值供其他资源引用
  TruncatedPipelineName:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value:
        Fn::Join:
          - ""
          - Fn::Select:
              - 0
              - Fn::Split:
                  - !Select [19, !Split ["", !Ref PipelineName]]
                  - !Ref PipelineName
  1. 直接拼接生成目标输出路径,无需额外解析:
# CodeBuild项目的输出配置示例
BuildProject:
  Type: AWS::CodeBuild::Project
  Properties:
    Artifacts:
      Type: S3
      Location: !Ref PipelineBucket
      Path: !GetAtt TruncatedPipelineName.Value
      Name: artifact_v1.0.0.zip
      NamespaceType: NONE

注意:AWS官方的流水线名称截断规则为仅截取前20个UTF-8字符,无额外转义或替换逻辑,上述拼接逻辑和官方规则100%匹配。

方案2:运行时解析CodeCommit源输出路径

如果你的场景必须从动态生成的源路径中截取前缀,可在CodeBuild构建阶段通过内置环境变量和AWS CLI实现:

  • CodePipeline触发CodeBuild时会自动注入源路径相关的环境变量,你可以在buildspec.yml的pre_build阶段加入以下逻辑:
version: 0.2
phases:
  pre_build:
    commands:
      # 提取当前构建对应的源输出S3路径
      - SOURCE_FULL_PATH=$(aws codepipeline get-action-execution --pipeline-name $PIPELINE_NAME --pipeline-execution-id $CODEPIPELINE_EXECUTION_ID --action-name Source --query 'actionExecution.output.outputArtifacts[0].location.s3Location.key' --output text)
      # 截掉最后两段(Source/随机ID部分)
      - TARGET_PATH_PREFIX=$(echo $SOURCE_FULL_PATH | awk -F/ 'BEGIN{OFS="/"}{NF-=2;print}')
      # 传递给build阶段使用
      - export TARGET_FULL_PATH="s3://${PIPELINE_BUCKET}/${TARGET_PATH_PREFIX}/artifact_v1.0.0.zip"
  build:
    commands:
      # 你的构建逻辑
      - echo "构建产物将输出到${TARGET_FULL_PATH}"
      # 构建完成后手动上传产物到目标路径
      - aws s3 cp ./build_output.zip ${TARGET_FULL_PATH}

注意:该方案需要给CodeBuild的服务角色添加codepipeline:GetActionExecution和对应S3桶的写入权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:18:03