如何在GitHub Actions中获取semantic release发布的版本并传递给后续步骤
解决方案
可以实现版本号传递,你可以通过GitHub Actions内置的输出变量功能获取semantic-release生成的版本号,同时通过判断版本号是否存在决定是否跳过后续更新步骤,具体操作如下:
步骤1:配置版本号输出
推荐使用官方@semantic-release/exec插件捕获发布成功后的版本号,首先安装插件:
npm install @semantic-release/exec -D
之后修改你的semantic-release配置文件(比如.releaserc.json),添加exec插件配置,发布成功时将版本号写入GitHub Actions输出变量:
{ "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/github", ["@semantic-release/exec", { "successCmd": "echo \"release_version=${nextRelease.version}\" >> $GITHUB_OUTPUT" }] ] }
步骤2:修改Workflow配置
推荐将两个逻辑放在同一个Job中(同Job内步骤传值更简单),给semantic-release步骤添加id,后续步骤通过id引用输出变量,同时添加if判断,只有版本号存在时才执行更新步骤:
jobs: release: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 with: fetch-depth: 0 # semantic-release需要全量提交历史才能分析版本,必须配置 - run: npm install - name: semanticRelease id: semantic-release # 给步骤加id用于后续引用输出 run: npx semantic-release -t \${version} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Update release if: steps.semantic-release.outputs.release_version != '' # 无新版本发布则自动跳过当前步骤 uses: tubone24/update_release@v1.2.0 env: GITHUB_TOKEN: ${{ github.token }} TAG_NAME: ${{ steps.semantic-release.outputs.release_version }} with: is_append_body: true body: "Update something"
跨Job传值的特殊情况
如果你确实需要拆分为两个独立Job,需要给第一个Job配置输出参数,第二个Job依赖第一个Job并引用输出即可:
jobs: release: runs-on: ubuntu-latest outputs: release_version: ${{ steps.semantic-release.outputs.release_version }} # 声明Job级输出 steps: # 此处省略和上文一致的release步骤配置 update-release: runs-on: ubuntu-latest needs: release # 声明依赖release Job执行完成再运行 if: needs.release.outputs.release_version != '' # 无新版本则跳过整个Job steps: - name: Update release uses: tubone24/update_release@v1.2.0 env: GITHUB_TOKEN: ${{ github.token }} TAG_NAME: ${{ needs.release.outputs.release_version }} with: is_append_body: true body: "Update something"
内容的提问来源于stack exchange,提问作者lakshmiravali rimmalapudi
相关产品推荐
相关产品推荐

