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

CI/CD流水线第二阶段Git命令未识别但第一阶段正常问题求助

CI/CD流水线Git配置问题解决

问题背景

第一阶段Git命令可正常执行,但第二阶段部署任务执行git config时提示'git' is not recognized as an internal or external command,且仓库未拉取。

报错日志

Starting: Set extra GIT header
==============================================================================
Task         : Command line
Description  : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows
Version      : 2.237.1
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line
==============================================================================
Generating script.
Script contents: shell
git config --global url."https://***@dev.azure.com".insteadOf "https://orgname@dev.azure.com"
========================== Starting Command Output ===========================
"C:\Windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "C:\a\_temp\1d2f3b21-87ec-4b17-b5cd-daf159f7640b.cmd""
'git' is not recognized as an internal or external command,
operable program or batch file.
##[error]Cmd.exe exited with code '1'.
Finishing: Set extra GIT header

流水线YAML配置

stages:
- stage: First
  displayName: First
  jobs:
  - job: First
    displayName: First
    pool: selfhostedpool
    steps:

    - script: |
        git config --global url."https://$(System.AccessToken)@dev.azure.com".insteadOf  "https://orgname@dev.azure.com"
      displayName: Set extra GIT header
      env:
        SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- stage: Second
  displayName: Second
  jobs:
  - deployment: Second
    environment: dev
    displayName: Second Stage
    pool: selfhostedpool
    strategy:
      runOnce:
        deploy:
          steps:

          - script: |
              git config --global url."https://$(System.AccessToken)@dev.azure.com".insteadOf "https://orgname@dev.azure.com"
            displayName: Set extra GIT header
            env:
              SYSTEM_ACCESSTOKEN: $(System.AccessToken)

解决第二阶段Git命令识别问题

方法1:添加Checkout任务初始化Git环境

部署任务默认不会自动拉取仓库代码,添加checkout: self任务可触发流水线拉取代码,同时自动初始化Git环境:

- stage: Second
  displayName: Second
  jobs:
  - deployment: Second
    environment: dev
    displayName: Second Stage
    pool: selfhostedpool
    strategy:
      runOnce:
        deploy:
          steps:
          - checkout: self  # 新增任务拉取代码并初始化Git
          - script: |
              git config --global url."https://$(System.AccessToken)@dev.azure.com".insteadOf "https://orgname@dev.azure.com"
            displayName: Set extra GIT header
            env:
              SYSTEM_ACCESSTOKEN: $(System.AccessToken)

方法2:手动配置Git路径到系统PATH

若自托管代理已安装Git但未加入系统默认PATH,可在执行Git命令前手动添加路径:

- script: |
    set PATH=%PATH%;C:\Program Files\Git\bin  # 根据代理机器上的实际Git安装路径调整
    git config --global url."https://$(System.AccessToken)@dev.azure.com".insteadOf "https://orgname@dev.azure.com"
  displayName: Set extra GIT header
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

方法3:检查自托管代理的Git安装

登录自托管代理所在机器,手动执行git --version确认Git是否正常安装。若未安装,先完成Git安装并将其路径添加到系统环境变量PATH中。


第一阶段的Git头配置是否需要重复?

需要重复,但可优化:

  • 每个Job(包括部署Job)是独立的运行会话,第一阶段的git config --global配置仅在该Job的代理会话中有效,第二阶段是全新会话,之前的配置不会保留。
  • 优化方案:
    • 改用仓库级配置:去掉--global参数,执行git config url."https://$(System.AccessToken)@dev.azure.com".insteadOf "https://orgname@dev.azure.com",配置会写入当前仓库的.git/config,后续拉取仓库时可直接继承。
    • 依赖Checkout任务自动认证:Azure DevOps的Checkout任务会自动使用System.AccessToken完成仓库认证,无需手动执行git config,可直接移除手动配置步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:05:11