Gitlab CI 变量,带引号的选项

Pep*_*lac 5 pytest gitlab

我有以下内容gitab-ci.yml file

stages:
  - tests

.test: &test_job
    image:
      name: test.com/test:latest
      entrypoint: [""]
    script:
    - py.test /test  -v $EXTRA_OPTIONS 

testing:
  variables:
    EXTRA_OPTIONS: -m "not slow"
  <<: *test_job
  stage: tests
Run Code Online (Sandbox Code Playgroud)

我想传递运行 pytest 的选项,例如:
py.test /tests -v -m "not slow"
以避免运行缓慢的测试,但 gitlab 正在尝试转义引号。
我有类似的东西: py.test /tests -v -m '"not\' 'slow"'

是否可以创建一个无需转义即可内联的变量?
我发现的只是这个链接,但没有帮助。

hoe*_*ing 4

首先,为了避免变量中的空格转义,请使用单引号:

variables:
    EXTRA_OPTIONS: -m 'not slow'
Run Code Online (Sandbox Code Playgroud)

要应用附加命令行参数,您有以下三个选项:

  1. PYTEST_ADDOPTS。在我看来,这是最简单的选择;只需在变量部分替换EXTRA_OPTIONS为:PYTEST_ADDOPTS
variables:
    PYTEST_ADDOPTS: -m 'not slow'
Run Code Online (Sandbox Code Playgroud)
  1. addopts与 结合使用-oaddopts是一个 inifile 键,使您能够将命令行参数保留在pytest.ini. arg-o/--override-ini允许覆盖 inifile 值,包括addopts. 两者的组合是通过环境变量传递命令行参数的绝妙技巧:

    script:
      - pytest -v -o "addopts=$EXTRA_OPTIONS" /test
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用eval

    script:
      - eval pytest -v "$EXTRA_OPTIONS" /test
    
    Run Code Online (Sandbox Code Playgroud)

但是,使用时需要非常小心eval;请参阅为什么在 Bash 中应避免 eval,以及我应该使用什么来代替? 。因此我更喜欢第一个选择。