GitHub Actions条件判断报错:未识别env变量,求代码修正
问题描述
需要判断提交信息不是[RELEASE],且属于[PATCH]、[MINOR]或[MAJOR]中的一种,因此定义了对应的环境变量,但运行工作流时出现错误:Unrecognized named-value: 'env',报错位置在env.PATCH == 'true'。原配置代码如下:
env: COMMIT_MSG: ${{ github.event.head_commit.message }} PATCH: ${{ startsWith(github.event.head_commit.message, '[PATCH]') || 'false' }} MINOR: ${{ startsWith(github.event.head_commit.message, '[MINOR]') || 'false' }} MAJOR: ${{ startsWith(github.event.head_commit.message, '[MAJOR]') || 'false' }} if: "!startsWith(github.event.head_commit.message, '[RELEASE]') && (${{ env.PATCH == 'true' }} || ${{env.MINOR == 'true' }} || ${{ env.MAJOR == 'true' }})"
问题原因
GitHub Actions中,工作流级别的env变量是在工作流初始化后才会被赋值,而if条件判断是在工作流初始化之前执行的,因此无法在这个阶段引用env变量,导致报错。
修正方案
方案1:直接在if中使用表达式判断(推荐)
不需要依赖环境变量,直接把判断逻辑写在if语句里,避免变量引用的时机问题:
if: > !startsWith(github.event.head_commit.message, '[RELEASE]') && ( startsWith(github.event.head_commit.message, '[PATCH]') || startsWith(github.event.head_commit.message, '[MINOR]') || startsWith(github.event.head_commit.message, '[MAJOR]') )
方案2:保留环境变量,调整变量定义位置
如果需要保留这些环境变量供后续步骤使用,可以把变量定义移到作业级别,并在作业的if中引用(作业级别的env在作业初始化时可用):
jobs: your-job-name: env: COMMIT_MSG: ${{ github.event.head_commit.message }} PATCH: ${{ startsWith(github.event.head_commit.message, '[PATCH]') }} MINOR: ${{ startsWith(github.event.head_commit.message, '[MINOR]') }} MAJOR: ${{ startsWith(github.event.head_commit.message, '[MAJOR]') }} if: > !startsWith(github.event.head_commit.message, '[RELEASE]') && (env.PATCH || env.MINOR || env.MAJOR) steps: # 后续步骤可以正常使用这些env变量
注意:这里把
|| 'false'去掉了,因为startsWith本身返回布尔值,直接赋值给环境变量即可,不需要转成字符串。
内容的提问来源于stack exchange,提问作者Christoph
相关产品推荐
相关产品推荐

