Azure Pipeline执行Cypress测试无法访问内部测试网站的解决方案咨询
问题描述
我有一套Cypress自动化测试用例,一部分针对无法外网访问的内部站点,另一部分针对公网站点。在内网机器上执行时所有测试都能跑通,但在Azure DevOps Pipeline里用ubuntu-latest托管虚拟机执行时,公网测试正常,内网测试因为无法访问站点失败。需要解决Azure DevOps执行环境访问内网的问题,或者其他可行方案。
我的Pipeline YAML配置如下:
trigger: - master pool: vmImage: 'ubuntu-latest' steps: - task: Yarn@3 displayName: yarn install inputs: projectDirectory: '$(System.DefaultWorkingDirectory)/UIAutomation' arguments: install - task: CmdLine@2 displayName: 'Run Cypress Tests' inputs: workingDirectory: '$(System.DefaultWorkingDirectory)/UIAutomation' script: yarn cypress run --browser chrome
解决方案
1. 使用自托管代理(最直接有效)
微软托管的ubuntu-latest虚拟机处于公网环境,无法直接访问内部站点。你可以在内网机器上部署Azure DevOps自托管代理,让测试在这个内网代理上执行:
- 在内网机器上下载并配置Azure DevOps自托管代理,将其加入你的项目专属代理池
- 修改Pipeline的
pool配置,替换为你的自托管代理池名称,示例:
pool: name: '你的内网代理池名称' # 如果需要指定特定机器,可添加: # demands: Agent.Name -equals 你的内网代理机器名
这样测试就会在内网代理机器上运行,自然能访问内部站点。
2. 拆分测试套件,分环境执行
如果不想全部测试都用自托管代理,可以把内网、公网测试拆分,分别用不同的代理环境执行:
- 在Cypress中用测试标签或文件夹分类区分内网/公网测试,比如给内网测试加
@internal标签,或者把内网测试放在cypress/e2e/internal目录 - 在Pipeline中添加两个测试任务,分别对应不同的代理池和测试范围:
trigger: - master jobs: # 公网测试:用微软托管代理 - job: PublicTests pool: vmImage: 'ubuntu-latest' steps: - task: Yarn@3 displayName: yarn install inputs: projectDirectory: '$(System.DefaultWorkingDirectory)/UIAutomation' arguments: install - task: CmdLine@2 displayName: 'Run Public Cypress Tests' inputs: workingDirectory: '$(System.DefaultWorkingDirectory)/UIAutomation' # 只跑公网测试,比如按标签筛选 script: yarn cypress run --browser chrome --env grepTags=@public # 内网测试:用自托管代理 - job: InternalTests pool: name: '你的内网代理池名称' steps: - task: Yarn@3 displayName: yarn install inputs: projectDirectory: '$(System.DefaultWorkingDirectory)/UIAutomation' arguments: install - task: CmdLine@2 displayName: 'Run Internal Cypress Tests' inputs: workingDirectory: '$(System.DefaultWorkingDirectory)/UIAutomation' script: yarn cypress run --browser chrome --env grepTags=@internal
3. 网络打通方案(需运维配合)
如果允许,可通过网络配置让微软托管代理访问内网:
- 联系运维团队,将微软托管代理的出口IP段加入内部站点的防火墙白名单
- 或者给内部站点配置反向代理,通过公网可访问的域名映射到内网站点,但要做好身份验证和安全防护,避免内网暴露风险
内容的提问来源于stack exchange,提问作者S.U.
相关产品推荐
相关产品推荐

