如何在GitHub Action中更新仓库全局变量的提交SHA值?
在GitHub Actions中更新仓库变量记录FE/BE提交SHA
GitHub Actions没有原生的仓库变量更新命令,需要通过GitHub API结合个人访问令牌(PAT)实现,以下是适配你需求的具体方案:
1. 创建具备权限的PAT
- 生成一个PAT,勾选
repo权限组下的所有权限(需具备修改仓库变量的权限) - 将该PAT存入仓库的Actions Secrets,命名为
REPO_PAT
2. 在工作流中编写变量更新逻辑
假设你已经实现了变更检测(能输出be_changed/fe_changed标记),以下是完整的工作流示例:
jobs: build-and-update-versions: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 with: fetch-depth: 0 # 拉取全量提交历史,用于获取指定目录的最后提交SHA # 这里替换成你已有的变更检测步骤,需输出be_changed/fe_changed状态 - name: 检测FE/BE变更 id: detect-changes run: | # 示例逻辑:检测backend目录是否有变更 BE_CHANGED=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -E "^backend/" || echo "false") FE_CHANGED=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -E "^frontend/" || echo "false") echo "be_changed=$( [ -n "$BE_CHANGED" ] && echo "true" || echo "false" )" >> $GITHUB_OUTPUT echo "fe_changed=$( [ -n "$FE_CHANGED" ] && echo "true" || echo "false" )" >> $GITHUB_OUTPUT # 获取BE目录最后提交SHA并更新VERSION_BE变量 - name: 更新VERSION_BE if: steps.detect-changes.outputs.be_changed == 'true' run: | # 获取backend目录的最后一次提交SHA BE_SHA=$(git log -1 --format="%H" -- ./backend) # 调用GitHub API更新仓库变量 curl -X PATCH \ -H "Authorization: token ${{ secrets.REPO_PAT }}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/${{ github.repository }}/actions/variables/VERSION_BE \ -d "{\"value\": \"$BE_SHA\"}" # 获取FE目录最后提交SHA并更新VERSION_FE变量 - name: 更新VERSION_FE if: steps.detect-changes.outputs.fe_changed == 'true' run: | # 获取frontend目录的最后一次提交SHA FE_SHA=$(git log -1 --format="%H" -- ./frontend) # 调用GitHub API更新仓库变量 curl -X PATCH \ -H "Authorization: token ${{ secrets.REPO_PAT }}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/${{ github.repository }}/actions/variables/VERSION_FE \ -d "{\"value\": \"$FE_SHA\"}" # 后续构建步骤:读取VERSION_BE和VERSION_FE变量生成镜像标签 - name: 构建并推送镜像 run: | echo "使用BE版本: ${{ vars.VERSION_BE }}" echo "使用FE版本: ${{ vars.VERSION_FE }}" # 这里编写你的镜像构建推送逻辑
注意事项
- 确保PAT的
repo权限完整,否则API调用会失败 - 变量名称必须与仓库设置中的完全一致(如
VERSION_BE) fetch-depth: 0必须设置,否则无法获取历史提交记录来计算指定目录的最后SHA- 变更检测逻辑可根据你的实际目录结构调整,确保准确识别FE/BE的变更
内容的提问来源于stack exchange,提问作者du-it
相关产品推荐
相关产品推荐

