You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:40:30