如何从package.json获取版本号并在Cloud Build步骤中为Docker镜像打标签?
用package.json的Version为Docker镜像打标签
要在Cloud Build中提取Node.js项目package.json里的version值,给Docker镜像添加额外版本标签,可按以下方式修改build.yaml:
修改后的build.yaml内容
steps: # 提取package.json中的version值 - name: node:18 entrypoint: bash args: - -c - | # 读取package.json的version并保存到文件 echo "VERSION=$(node -p "require('./package.json').version")" > /workspace/version.txt # 构建容器镜像,添加多标签 - name: ${_BUILDER_DOCKER} entrypoint: bash args: - -c - | source /workspace/version.txt docker build -t ${_IMAGE}:${_IMAGE_TAG} -t ${_IMAGE}:latest -t ${_IMAGE}:v${VERSION} . # 推送所有标签到容器仓库 - name: ${_BUILDER_DOCKER} args: [ 'push', '${_IMAGE}', '--all-tags'] # 部署容器镜像到Cloud Run - name: ${_BUILDER_GCLOUD} entrypoint: gcloud args: - 'run' - 'deploy' - 'build-demo' - '--image' - '${_IMAGE}:${_IMAGE_TAG}' - '--region' - 'us-west2' - '--platform' - 'managed' - '--port' - '3000' - '--allow-unauthenticated' options: automapSubstitutions: true logging: CLOUD_LOGGING_ONLY substitutions: _BUILDER_GCLOUD: gcr.io/google.com/cloudsdktool/cloud-sdk _BUILDER_DOCKER: gcr.io/cloud-builders/docker _IMAGE_TAG: '${SHORT_SHA}_${BUILD_ID}' _IMAGE: 'us-west2-docker.pkg.dev/${PROJECT_ID}/demo/dev/build-demo' timeout: 300s
关键说明
- 提取版本步骤:使用node镜像执行命令读取package.json的version字段,将值存入
/workspace/version.txt(Cloud Build的工作目录可跨步骤共享)。 - 镜像构建步骤:先加载保存的版本变量,再执行docker build时添加三个标签:原有的提交详情标签、latest标签、版本标签(格式为
v{version},比如v1.0.1)。 - 推送标签:
--all-tags参数会推送该镜像的所有标签到仓库,无需单独推送每个标签。 - 部署选择:如果希望用版本标签部署Cloud Run,只需将
--image参数改为${_IMAGE}:v${VERSION}即可。
注意事项
- 请根据你的项目Node.js版本调整node镜像标签(比如
node:20)。 - 如果package.json不在项目根目录,需修改require路径(比如
require('./src/package.json').version)。 - 若package.json的version字段本身已带v前缀(比如v1.0.1),则将镜像标签改为
${_IMAGE}:${VERSION}即可。
内容的提问来源于stack exchange,提问作者sonooby
相关产品推荐
相关产品推荐

