【问题标题】:TFS : git clone private repository through Composer failsTFS:通过 Composer 的 git clone 私有存储库失败
【发布时间】:2020-06-29 16:26:46
【问题描述】:

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

在我们的 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: I am getting fatal: could not read Username for 'https://github.com': terminal prompts disabled 让我们简单地勾选“允许脚本访问 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信息被忽略了。

【问题讨论】:

  • 您能否尝试以构建代理服务的身份登录,并使用正确的用户 ID 和密码在 Windows 凭据管理器中为“服务器名称”(您的 tfs 服务器机器)添加一个条目。 Git for Windows 实际上使用 Windows 凭据管理器进行身份验证。您可能还需要运行“git config --global credential.helper manager”以确保坚持。
  • 嗨!感谢您的反馈意见。我用一些信息更新了这个问题。

标签: git tfs azure-devops composer-php


【解决方案1】:

尝试改变repositories的顺序,让git repo排在typo3前面,如下:

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

    "require": {
        ...
    }
}

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

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

Source link

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

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

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

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

【讨论】:

  • 感谢您的回答。在您的帖子之后,我在问题中添加了更多信息。
  • 嗨@Lancelot,But if we simply do it from a command prompt or access those URL from the browser, we don't have any trouble. 根据您的描述,问题似乎与身份验证无关。您可以使用身份验证来获取 repo 和克隆文件。无论如何,这可能与作曲家有关吗?您通过 composer 克隆 git 存储库的方式可能有问题。
  • 感谢您的回答!我会检查你的链接。我还想知道这是否可能来自构建过程中的权限问题。
猜你喜欢
  • 2016-06-29
  • 2015-03-19
  • 2015-07-30
  • 2014-08-15
  • 2023-03-09
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多