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

如何在Azure Pipeline中配置HTTP/2协议执行git checkout

问题说明

需要配置Azure Pipelines中的Git checkout步骤基于HTTP/2协议运行,当前未找到对应开放配置项,Azure内置checkout逻辑会强制将http.Version设置为HTTP/1.1,受防火墙规则限制,HTTP/1.1的Git请求会被拦截,需要可落地的配置方案或变通方法。

基础环境信息

  • 代理运行形态:Kubernetes集群中以容器形式运行的azp自托管代理
  • 流水线运行日志截图:
    流水线运行日志
  • 当前使用的流水线YAML配置:
pool:
  name: "some pool"

trigger:
- some branch

stages:
- stage: main
  jobs:
  - job: synchronize
    steps:
    - checkout: self
      clean: true
      displayName: Git checkout
      continueOnError: true
    - task: Bash@3
      inputs:
        targetType: filePath
        filePath: $(System.DefaultWorkingDirectory)/scripts/sync_git.sh
        workingDirectory: $(System.DefaultWorkingDirectory)
可行方案

方案1:弃用内置checkout步骤,手动执行Git拉取

Azure Pipelines内置checkout任务的HTTP版本配置是硬编码在任务逻辑中的,没有对外暴露修改入口,直接跳过内置步骤手动写脚本拉取是改造成本最低的方案:

  1. 将原有checkout: self配置修改为checkout: none,关闭默认的代码拉取逻辑
  2. 在原有业务脚本前新增Bash步骤,提前配置Git强制使用HTTP/2,再通过系统内置访问令牌完成代码拉取,参考配置如下:
steps:
- checkout: none
- task: Bash@3
  displayName: 拉取代码(HTTP/2)
  inputs:
    targetType: inline
    script: |
      git config --global http.version HTTP/2
      git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone $(Build.Repository.Uri) $(System.DefaultWorkingDirectory)
      cd $(System.DefaultWorkingDirectory)
      git checkout $(Build.SourceVersion)
      # 存在子模块时追加下行配置
      # git submodule update --init --recursive
- task: Bash@3
  inputs:
    targetType: filePath
    filePath: $(System.DefaultWorkingDirectory)/scripts/sync_git.sh
    workingDirectory: $(System.DefaultWorkingDirectory)

注意:需要提前在流水线权限设置中,给构建服务账号开放对应代码仓库的读取权限,否则令牌拉取会返回403

方案2:定制azp代理容器镜像,强制Git全局配置优先级

由于代理运行在K8s容器中,可以直接定制代理镜像从底层覆盖配置,不需要修改每条流水线的YAML:

  • 构建自定义azp代理镜像时,提前执行git config --system http.version HTTP/2写入系统级Git配置
  • 在代理容器的环境变量中注入Git配置优先级最高的环境变量参数:
    GIT_CONFIG_COUNT=1
    GIT_CONFIG_KEY_0=http.version
    GIT_CONFIG_VALUE_0=HTTP/2
    
    Git读取环境变量配置的优先级高于仓库本地配置、任务传入的配置参数,即使内置checkout任务尝试覆写http.version为HTTP/1.1也不会生效。
  • 将K8s中运行的azp代理镜像替换为自定义镜像即可。

方案3:网络层代理转发

如果前两种方案改造成本较高,可以在K8s集群内部署正向代理:代理和防火墙侧通信走HTTP/2协议,代理和azp代理侧接收HTTP/1.1的Git请求,再转发到Azure Repos服务。只需要给Git配置全局http.proxy参数指向集群内代理地址,不需要修改原有checkout逻辑,也不需要调整Git的HTTP版本配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:18:16