YAML 语法:如何在每个阶段之前获取 运行 的相同命令,而不在 YAML 文件中重复自己?

YML syntax: How do I get the same commands to run before each stage without repeating myself in the YML file?

我已经为我的自托管 运行ner 设置了一个 .gitlab-ci.yml 文件,如下所示。

stages:
  - set-environment
  - check-code

set-environment:
  stage: set-environment
  script:
    - C:\Users79\Documents\WindowsPowerShell\profile.ps1
    - conda activate temp

run_tests:
  stage: check-code
  script:
    - pytest test.py

type_checker:
  stage: check-code
  script:
    - (ls -recurse *.py).fullname | foreach-object {echo "`n$_`n";mypy --strict $_} 

我打算使用 set-environment 阶段使 mypypytest 可用于后续的 check-code 阶段。不幸的是,这不是它的工作原理。 GitLab 在每个阶段完成后销毁 shell。

我知道这是我对 Gitlab Runner 工作原理的理解存在缺陷。如何在 run_teststype_checker 之前使用 set-environment 运行 中的命令而不在 YML 文件中重复它们?

在 gitlab-ci.yaml 中你可以定义一个全局的 before_script。它看起来像这样。

stages:
  - check-code

before_script:
  - C:\Users79\Documents\WindowsPowerShell\profile.ps1
  - conda activate temp

run_tests:
  stage: check-code
  script:
    - pytest test.py

type_checker:
  stage: check-code
  script:
    - (ls -recurse *.py).fullname | foreach-object {echo "`n$_`n";mypy --strict $_} 

我强烈建议您阅读 gitlab-ci.yaml documentation。因为还有更多像这样的好功能。