GitLab 的 stage(阶段)只是把作业分组,它并不拥有独立的进程环境。把代理变量放在真正需要它们的作业上,可选做法是借助可复用的隐藏模板:

.proxy-environment:
  variables:
    HTTP_PROXY: "$CODE_PROXY"
    HTTPS_PROXY: "$CODE_PROXY"
    NO_PROXY: "localhost,127.0.0.1"

external_check:
  extends: .proxy-environment
  stage: test
  script:
    - python ci/check_external_service.py

CODE_PROXY 由项目现有的变量管理机制提供。对于允许通过公共代理访问公共服务的作业,它的取值可以使用 HTTP 代理列表 中的 HTTP 端点。这里的 Python 命令只是项目任务的示例。其他作业可以不引用这个模板,同一个 stage 中的多个作业也可以各自选择不同的环境。

如果这些代理变量不应被广泛继承,就不要把它们放进顶层 YAML 默认值。同时还要检查项目、群组和流水线变量:它们的优先级可能覆盖作业 YAML 中的取值。

inherit:variables 控制是否继承 YAML 默认变量,但它不会清除项目或群组的 CI/CD 变量,因此它不是用来移除所有代理来源的通用开关。

以上配置作用于作业进程。在作业内启动的 HTTP 客户端必须支持这些变量,而 runner 在此之前拉取镜像所用的连接有它自己的配置。

相关文章