如何在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
相关产品推荐
相关产品推荐

