简体   繁体   中英

How to get CodeBuild project name from buildspec file

This is my buildspec file to build an Angular, React, Vue or similar project through AWS CodeCommit and publish the resulting artifact to an S3 bucket:

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`

What I would like to do is to use a subfolder with the name of the project when publishing the result files in the bucket. Now all files go to my-bucket but I would like them to go to my-bucket/name-of-the-project

I could change the post-build command to something like

    - aws s3 cp dist s3://${S3_BUCKET}/name-of-the-project --recursive

That way it would be always the same directory name. What I want is to get dynamically the name of the CodeBuild project or from the package.json or similar to make that directory match the project name.

Here are two ways to read a project identifier from the build context at run-time:

Option 1 : Read the project name from package.json :

PROJECT_NAME=$(cat package.json | jq -r '.name')
echo $PROJECT_NAME # -> name-of-the-project

Option 2 : Extract the CodeCommit repo name from the source URL. Each CodeBuild execution exposes several environment variables , including CODEBUILD_SOURCE_REPO_URL .

echo $CODEBUILD_SOURCE_REPO_URL # -> https://git-codecommit.us-east-1.amazonaws.com/v1/repos/my-repo

REPO_NAME=$(awk -F\"/\" '{print $NF}' <<< $CODEBUILD_SOURCE_REPO_URL) # split the url at '/', return the last item
echo $REPO_NAME # -> my-repo

Pass one of the captured names to the S3 command:

aws s3 cp dist s3://${S3_BUCKET}/${PROJECT_NAME} --recursive

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM