如何在GitHub Actions的Job if条件中正确拼接字符串?
正确写法
有两种合法的表达式写法可以实现字符串拼接:
- 使用
format函数(推荐)
if: github.ref == format('refs/heads/{0}', env.RELEASE_BRANCH_NAME)
在GitHub Actions的表达式上下文(if条件属于这类上下文)中,无需用${{ }}包裹环境变量,直接通过env.VAR_NAME引用即可,format函数会自动将第二个参数填入占位符{0}的位置。
- 使用字符串拼接运算符
+
if: github.ref == 'refs/heads/' + env.RELEASE_BRANCH_NAME
直接用+连接字符串字面量和环境变量,这也是表达式语法支持的写法。
你尝试的写法错误原因
写法1:
if: github.ref == 'refs/heads/'${{ env.RELEASE_BRANCH_NAME }}
错误:在if的表达式上下文中,不能混合使用字符串字面量和${{ }}插值语法,整个条件需遵循表达式规则,而非shell风格拼接。写法2:
if: github.ref == 'refs/heads/'$RELEASE_BRANCH_NAME
错误:$RELEASE_BRANCH_NAME是shell变量的引用方式,不适用于GitHub Actions的表达式上下文,表达式中需用env.RELEASE_BRANCH_NAME引用环境变量。写法3:
if: github.ref == format('refs/heads/{0}', ${{ env.RELEASE_BRANCH_NAME }})
错误:format函数的参数本身就在表达式上下文内,无需额外用${{ }}包裹环境变量,重复包裹会导致语法解析错误。
额外注意
你的工作流中runs-on: [ linux ]写法不规范,Linux环境的runner应指定具体的镜像,比如runs-on: ubuntu-latest或runs-on: ubuntu-22.04。
内容的提问来源于stack exchange,提问作者Amin Ba

