繁体   English   中英

TFS:通过 Composer git clone 私有存储库失败

[英]TFS : git clone private repository through Composer fails

当前,当我们尝试构建一个PHP项目时遇到了一个问题,该项目需要通过 TFS 构建管道在专用构建机器上托管在我们的私有TFS 本地存储库上的内部Composer包。

在我们的composer.json文件中,引用了外部和内部包。 所以,我们有这样的事情:

{
    "repositories": [
    { 
      "type": "composer", 
      "url": "https://composer.typo3.org/" 
    },
    { 
        "type": "git", 
        "url": "https://servername/tfs/organisation/project/_git/repository" 
    },
    "require": {
        ...
    }
}

因为我们在防火墙后面,所以我们必须设置代理信息才能获取外部包。 我们这样做:

export http_proxy="http://proxy-url"
export https_proxy="http://proxy-url"

然而,当我们通过我们的代理时,我们无法获得私有包,因此我们创建了另一个步骤,在代理配置恢复后负责内部包的安装。

因此,使用我们的私有包, Composer将简单地...

git clone --mirror 'https://service_account:password@servername/tfs/organisation/project/_git/repository'

不幸的是,我们总是收到以下错误:

fatal: Authentication failed for 'https://service_account:password@servername/tfs/organisation/project/_git/repository'

我们尝试了几件事:

使用的服务帐户对相关私有存储库拥有所有权限,并用于具有所需权限的机器上的构建代理。 我们的TFS服务器和构建机器之间的连接是开放的。 我们可以执行ping tfs.servertelnet tfs.server 443没有任何错误。 获取源代码”步骤在构建过程开始时也能很好地工作。 命令git clone 'https://username:password@servername/tfs/organisation/project/_git/repository'适用于其他任何地方。

有人可以在这方面给我们一点帮助或只是一点提示吗? 将不胜感激。 有没有人遇到过这样的问题或行为?

提前谢谢了。

此致,

编辑 1,按照 PatrickLu-MSFT 的回答

以下帖子, Azure Pipelines:我变得致命:无法读取“https://github.com”的用户名:终端提示已禁用,让我们只需勾选“允许脚本访问 OAuth 令牌”选项。 所以,我们试着这样做

  • git clone --bare https://service_account :$(System.AccessToken)@servername/tfs/organisation/project/_git/repository
  • git clone --bare https://$(System.AccessToken)@servername/tfs/organisation/project/_git/repository
  • git clone --bare https://$env:SYSTEM_ACCESSTOKEN@servername/tfs/organisation/project/_git/repository

......但它没有用。

我们还尝试了以下事情:

git config http.extraheader "AUTHORIZATION: bearer $(System.AccessToken)"

或者

git config http.https://servername/tfs/organisation/project/_git/repository.extraheader "AUTHORIZATION: bearer $(System.AccessToken)"

然后

git clone https://servername/tfs/organisation/project/_git/repository

...没有成功。 但是,如果我们只是从命令提示符执行此操作或从浏览器访问这些 URL,则不会有任何问题。

但是,如果我们这样做

git config http.extraheader "AUTHORIZATION: bearer $(System.AccessToken)" clone https://servername/tfs/organisation/project/_git/repository

...我们得到类似“ repository.git ”的东西,它只包含 Git 文件夹的内容,而不是包本身。

编辑 2

经过许多充满欢乐的美好时光,我们终于设法得到了这样的东西:

REPO_URL=https://servername/tfs/organisation/project/_git/repository
EXTRAHEADER="AUTHORIZATION: bearer $(System.AccessToken)"
git -c http.extraheader="$EXTRAHEADER" clone $REPO_URL

我们必须为每个私有包都这样做,但它似乎可以完成这项工作。 但是对于这个解决方案,为了干净,我们必须有两个composer.json文件:一个用于本地开发,另一个用于不包含私有包的构建管道。

同样有趣的是,以下事情不起作用:

git config credential.https://servername/tfs/organisation.integrated true
git config credential.helper store
git config http.$REPO_URL.extraheader "$EXTRAHEADER"

git clone https://servername/tfs/organisation/project/_git/repository
# OR
composer require vendor/package-name

似乎忽略了 extraheader 信息。

尝试更改存储库的顺序,以便 git repo 列在 typo3 之前,如下所示:

{
    "repositories": [
     { 
        "type": "git", 
        "url": "https://domain/tfs/organisation/project/repository" 
    },
    { 
      "type": "composer", 
      "url": "https://composer.typo3.org/" 
    },

    "require": {
        ...
    }
}

对于这种身份验证失败错误,如果您使用 PAT 令牌来处理身份验证。 由于您将 PAT与本地 TFS 服务器一起使用,请确保您已关闭服务器上的基本身份验证 否则你会得到一个返回的错误。

我们建议您在使用 Azure DevOps 服务器时始终关闭 IIS 基本身份验证。 仅在必要时才启用 IIS 基本身份验证。 在 Windows 计算机上启用 IIS 基本身份验证后,它会阻止您使用个人访问令牌 (PAT) 作为身份验证机制。

源码链接

对于 TFS 中的克隆 url,应该如下所示:

git clone https://PAT@tfsservername:8080/tfs/Collectionname/Projectname/_git/GitReponame

如果这不起作用,因为您在代理后面。 在您原来的浏览器中使用时,请尝试暂时关闭代理。

如果问题与代理端有关,这将有助于缩小范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM