Github Actions默认工作目录变量配置问题求助
GitHub Actions 输入变量无法传递到默认工作目录问题排查
问题说明
配置GitHub Actions时,希望通过workflow_dispatch的输入变量给默认工作目录传值(而非硬编码),但尝试${{ github.event.inputs.PATH }}和${{ inputs.PATH }}都无法读取到变量的实际值;同时步骤中引用的APPNAME变量未定义,导致输出异常。
问题原因
- 根层级
defaults的上下文限制:工作流根层级的defaults.run.working-directory无法直接使用inputs或github.event.inputs上下文。因为根层级的defaults在工作流初始化阶段就被解析,此时workflow_dispatch的输入变量还未完成加载,无法被读取。 - 未定义变量引用:原代码中
echo "${{ inputs.ENVIRONMENT}}/${{ inputs.APPNAME }} "里的APPNAME未在on.workflow_dispatch.inputs中定义,会输出空值。
解决方案
方案1:在Job层级设置默认工作目录
将defaults移到Job内部,此时可以正常访问inputs变量:
name: Test on: workflow_dispatch: inputs: ENVIRONMENT: default: development type: string PATH: default: test type: string APPNAME: # 补充缺失的输入变量 default: my-app type: string jobs: job1: runs-on: ubuntu-latest defaults: run: shell: bash working-directory: ${{ inputs.PATH }} # Job层级的defaults可访问inputs steps: - name: Run Commands with various variables run: | echo "Hello World" echo "${{ inputs.ENVIRONMENT }}/${{ inputs.APPNAME }}"
方案2:在Step层级直接指定工作目录
如果不需要给整个Job设置默认工作目录,可在具体Step中直接指定:
name: Test on: workflow_dispatch: inputs: ENVIRONMENT: default: development type: string PATH: default: test type: string APPNAME: default: my-app type: string jobs: job1: runs-on: ubuntu-latest steps: - name: Run Commands with various variables shell: bash working-directory: ${{ inputs.PATH }} run: | echo "Hello World" echo "${{ inputs.ENVIRONMENT }}/${{ inputs.APPNAME }}"
关键说明
- Job层级或Step层级的配置在Job执行阶段解析,此时
workflow_dispatch的输入变量已完全加载,因此可以正常使用${{ inputs.xxx }}引用。 - 所有在步骤中引用的输入变量,必须提前在
on.workflow_dispatch.inputs中定义,否则会输出空值。
内容的提问来源于stack exchange,提问作者Sat
相关产品推荐
相关产品推荐

