Azure YAML流水线集成Storybook/Chromatic报bad substitution错误求助
错误原因
bad substitution是Bash执行变量替换时无法识别目标变量的典型报错,对应当前场景有以下几个常见触发原因:
- Azure DevOps的保密变量默认不会自动注入到脚本的运行环境中,如果你没有在步骤的
env字段中显式声明project_token变量和Azure流水线变量的映射关系,Bash就会找不到该变量触发报错 - 你使用了sh而非Bash执行脚本,sh不支持部分Bash专属的变量替换语法
- 变量名拼写错误、大小写不匹配,或者
${}中存在多余空格(比如${ project_token }) - 直接在命令中写死
${project_token}字符串,没有绑定实际的变量值
解决方案
按以下步骤逐一排查即可解决:
- 显式在Chromatic执行步骤的
env字段中声明变量映射,示例YAML配置如下:
- bash: npx chromatic --project-token=${project_token} env: # 右侧的$(CHROMATIC_PROJECT_TOKEN)替换为你在Azure流水线中定义的保密变量名 project_token: $(CHROMATIC_PROJECT_TOKEN) displayName: '发布到Chromatic'
- 确认脚本执行器使用
bash而非script(默认可能走sh),避免语法兼容问题 - 检查变量名拼写完全一致,
${}内不要加多余空格,严格写为${project_token} - 如果你选择直接在命令中填写明文token,不要用
${}包裹,直接写入token字符串即可,但该方式存在泄露风险,不推荐使用 - 如需调试可添加临时步骤验证变量是否正常注入:
- bash: echo "变量注入状态:${project_token:+成功}" env: project_token: $(CHROMATIC_PROJECT_TOKEN)
如果输出变量注入状态:成功说明变量绑定正常,否则需要检查Azure流水线变量的配置是否正确。
内容的提问来源于stack exchange,提问作者Sole
相关产品推荐
相关产品推荐

