GitHub Actions:跨仓库触发与分支名变量适配问题求助
解决GitHub Actions分支变量适配两种触发场景的问题
问题根源
你原来的判断逻辑[[ -v ${{ inputs.branchname }} ]]失效的原因是:当仓库B自身推送代码时,触发事件不是workflow_dispatch,此时inputs.branchname在GitHub上下文里不存在,模板渲染后会变成空字符串,导致[[ -v "" ]]出现语法错误,无法正确执行判断。
解决方案1:预定义环境变量(推荐)
直接在Job级别通过GitHub表达式定义环境变量,自动适配两种触发场景:
jobs: build: # 预定义分支变量:workflow_dispatch触发时用传入的branchname,否则默认dev env: BRANCH_NAME: ${{ github.event_name == 'workflow_dispatch' && inputs.branchname || 'dev' }} steps: - uses: ... ... - name: my script run: | # 直接使用预定义的环境变量即可 echo "当前使用分支:$BRANCH_NAME" # 后续业务逻辑基于$BRANCH_NAME处理 ...
解决方案2:在脚本内判断触发事件
如果需要在脚本内处理逻辑,可以先判断触发事件类型,再决定变量取值:
jobs: build: steps: - uses: ... ... - name: my script run: | # 判断是否为workflow_dispatch触发,且传入的branchname非空 if [[ "${{ github.event_name }}" == "workflow_dispatch" && -n "${{ inputs.branchname }}" ]]; then value="${{ inputs.branchname }}" else value="dev" fi echo "当前使用分支:$value" # 后续逻辑基于value处理 ...
关键说明
github.event_name可以准确识别当前流水线的触发类型(workflow_dispatch或push等)- 用
-n "${{ inputs.branchname }}"可以避免workflow_dispatch触发但未传参的情况(如果你的workflow_dispatch设置了参数必填,这一步可以省略)
内容的提问来源于stack exchange,提问作者Payam30
相关产品推荐
相关产品推荐

