如何通过GitHub Actions从package.json取版本号推送双标签Docker镜像
实现GitHub Actions推送带版本号的Docker镜像
步骤1:提取package.json中的版本号
在GitHub Actions工作流里,你可以用jq工具直接从package.json读取version字段,并存为环境变量。添加以下步骤:
- name: 获取版本号 id: get_version run: echo "VERSION=$(jq -r '.version' package.json)" >> $GITHUB_ENV
如果你的 runner 没预装jq,可以用actions/github-script替代:
- name: 获取版本号 id: get_version uses: actions/github-script@v6 with: script: | const fs = require('fs'); const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')); core.exportVariable('VERSION', packageJson.version);
步骤2:构建并推送双标签镜像
修改现有构建推送步骤,给镜像同时打上latest和${{ env.VERSION }}两个标签,一次性完成推送:
- name: 登录Docker仓库 uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: 构建并推送镜像 uses: docker/build-push-action@v5 with: context: . push: true tags: | my-app:latest my-app:${{ env.VERSION }}
完整工作流示例
整合后的完整工作流片段如下:
name: 构建并推送Docker镜像 on: push: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 获取版本号 id: get_version run: echo "VERSION=$(jq -r '.version' package.json)" >> $GITHUB_ENV - name: 登录Docker仓库 uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: 构建并推送双标签镜像 uses: docker/build-push-action@v5 with: context: . push: true tags: | my-app:latest my-app:${{ env.VERSION }}
关键说明
- 用
$GITHUB_ENV存储版本号,确保后续步骤能直接引用 docker/build-push-action支持通过多行tags参数一次指定多个标签,避免重复构建镜像- 确保仓库已配置Docker仓库的用户名和密码作为Secrets(
DOCKER_USERNAME和DOCKER_PASSWORD)
内容的提问来源于stack exchange,提问作者Chris T
相关产品推荐
相关产品推荐

