代理变量应属于需要它们的 GitLab 作业
复用隐藏的作业模板来限定代理环境,而不是让它成为整条流水线的默认值。
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.pyCODE_PROXY 由项目现有的变量管理机制提供。对于允许通过公共代理访问公共服务的作业,它的取值可以使用 HTTP 代理列表 中的 HTTP 端点。这里的 Python 命令只是项目任务的示例。其他作业可以不引用这个模板,同一个 stage 中的多个作业也可以各自选择不同的环境。
如果这些代理变量不应被广泛继承,就不要把它们放进顶层 YAML 默认值。同时还要检查项目、群组和流水线变量:它们的优先级可能覆盖作业 YAML 中的取值。
inherit:variables 控制是否继承 YAML 默认变量,但它不会清除项目或群组的 CI/CD 变量,因此它不是用来移除所有代理来源的通用开关。
以上配置作用于作业进程。在作业内启动的 HTTP 客户端必须支持这些变量,而 runner 在此之前拉取镜像所用的连接有它自己的配置。