GitLab CI传递带空格的pytest参数异常,求正确配置方案
问题原因
在GitLab CI的shell执行环境中,直接展开${OPTIONS}时,变量内的引号会被当作普通字符串处理,而非shell的参数边界标记。shell会按空格对OPTIONS的内容进行分词,把--opt0="123、456"、--opt1="789、abc"当作独立的参数传递给pytest。pytest解析时,会将第一个--opt0="123识别为选项名,后续所有分词结果都被当作该选项的参数值,最终导致opt0的取值包含了原本属于opt1的内容。
正确传参方法
方法1:使用bash数组(推荐,安全可控)
利用bash数组保存带空格的参数,展开时用"${OPTIONS[@]}"保证每个参数被正确识别:
test_a: script: - OPTIONS=(--opt0="123 456" --opt1="789 abc") - pytest test_a.py "${OPTIONS[@]}"
方法2:使用eval命令(仅当变量内容完全可控时使用)
eval会重新解析字符串中的引号,将其作为shell语法处理,还原手动执行时的参数解析逻辑:
test_a: script: - eval "pytest test_a.py $OPTIONS" variables: OPTIONS: --opt0="123 456" --opt1="789 abc"
方法3:拆分独立变量
将每个选项拆分为单独的变量,避免多参数混在一个变量中:
test_a: script: - pytest test_a.py $OPT0 $OPT1 variables: OPT0: --opt0="123 456" OPT1: --opt1="789 abc"
内容的提问来源于stack exchange,提问作者Tri Vu Khac
相关产品推荐
相关产品推荐

