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

如何在GitLab CI中配置子域名以支持Web框架多站点路由测试?

在自托管GitLab CI虚拟机中配置内网域名指向localhost的方案

要让CI环境里的测试能把intranet.something.rs解析到localhost,核心是修改虚拟机的hosts文件,同时确保CI job有足够权限完成这个操作,下面是具体的实现步骤:

1. 配置GitLab Runner的sudo权限(可选但推荐)

因为修改/etc/hosts需要root权限,如果你用的是shell executor的GitLab Runner,默认runner用户(通常是gitlab-runner)没有sudo权限的话,需要先配置免密码sudo:

  • 登录到自托管虚拟机,执行sudo visudo
  • 添加一行:gitlab-runner ALL=(ALL) NOPASSWD: /usr/bin/tee, /usr/bin/sed
    这样runner用户就能免密码执行修改hosts需要的命令,避免CI job里输入密码的麻烦。

2. 在.gitlab-ci.yml中添加hosts配置步骤

在你的测试job里,通过before_script阶段添加域名解析规则,同时可以在after_script阶段清理,避免影响后续job:

stages:
  - test

test_routes:
  stage: test
  before_script:
    # 添加intranet.something.rs指向localhost的解析
    - echo "127.0.0.1 intranet.something.rs" | sudo tee -a /etc/hosts > /dev/null
    # 可选:验证hosts是否生效
    - ping -c 2 intranet.something.rs
  script:
    # 这里执行你的测试命令,比如启动Web框架、运行测试运行器
    - ./start-web-framework.sh
    - ./run-test-runner.sh
  after_script:
    # 清理添加的hosts条目,避免污染环境
    - sudo sed -i '/intranet.something.rs/d' /etc/hosts

3. 确保Web服务器监听正确的地址

你的Web框架需要监听0.0.0.0或者localhost,这样CI环境里的测试请求才能访问到。如果框架默认只监听127.0.0.1,那刚好匹配hosts的配置;如果需要对外监听,确保端口没有被防火墙拦截。

替代方案:通过环境变量让Web框架处理路由

如果修改hosts对你来说有权限顾虑,也可以在CI job里设置环境变量,让你的Web框架直接把intranet.something.rs的请求路由到内网服务,比如:

test_routes:
  stage: test
  variables:
    INTRANET_DOMAIN_TARGET: "localhost:8000"
  script:
    # 启动Web框架时读取这个环境变量,处理路由转发
    - ./start-web-framework.sh --intranet-target=$INTRANET_DOMAIN_TARGET
    - ./run-test-runner.sh

这种方式不需要修改系统hosts,完全由应用层处理,适合权限受限的场景。

内容的提问来源于stack exchange,提问作者tobias47n9e

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:22:01