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

如何在buildspec中动态获取项目名,实现S3分目录存储构建产物

如何在buildspec中动态获取项目名并上传到S3子目录

我现有一个用于AWS CodeCommit构建Angular、React、Vue等前端项目,并将产物发布到S3桶的buildspec文件。当前构建产物会直接上传到S3桶根目录,我希望能动态把产物传到my-bucket/项目名这样的子目录,不想写死固定的目录名。

原buildspec文件如下:

version: 0.2
env:
  variables:
    S3_BUCKET: "my-bucket"
phases:
  install:
    runtime-versions:
      nodejs: 16
  pre_build:
    commands:
      - echo Installing source NPM dependencies...
      - npm install
  build:
    commands:
      - echo Build started on `date`
      - npm run build
  post_build:
    commands:
      - aws s3 cp dist s3://${S3_BUCKET} --recursive
      - echo Build completed on `date`

下面提供两种动态获取项目名的方案:

方案1:用CodeBuild内置环境变量直接获取项目名

AWS CodeBuild会自动为构建过程注入内置环境变量,其中CODEBUILD_PROJECT_NAME就是当前运行构建的项目名称,直接拿来用就行。

修改post_build阶段的命令即可:

post_build:
  commands:
    - aws s3 cp dist s3://${S3_BUCKET}/${CODEBUILD_PROJECT_NAME} --recursive
    - echo Build completed on `date`

方案2:从package.json中提取项目名

如果想让S3子目录和项目package.json里的name字段保持一致,可以用jq工具解析package.json:

注意:如果使用的是CodeBuild默认的Ubuntu镜像,需要先安装jq;如果是Amazon Linux镜像,把安装命令换成yum install jq -y。

修改后的完整buildspec:

version: 0.2
env:
  variables:
    S3_BUCKET: "my-bucket"
phases:
  install:
    runtime-versions:
      nodejs: 16
    commands:
      - echo Installing dependencies and jq...
      - npm install
      - apt-get update && apt-get install -y jq
  pre_build:
    commands:
      - export PROJECT_NAME=$(jq -r '.name' package.json)
  build:
    commands:
      - echo Build started on `date`
      - npm run build
  post_build:
    commands:
      - aws s3 cp dist s3://${S3_BUCKET}/${PROJECT_NAME} --recursive
      - echo Build completed on `date`

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:35:50