当前位置: 首页 > 知识库问答 >
问题:

DokCeopeCo无法从TFS(Team Foundation Server)中解析Git URI

百里光熙
2023-03-14

TL;博士

有什么办法可以让docker-comush与TFS Git URI一起工作吗?

我写了一篇简单的docker作文。从包含dockerfile的存储库中提取并构建映像的yml。

version: '3.4'

services:
  ubuntu:    
    image: ubuntu-fromrepo
    build:       
      context: https://github.com/dockerfile/ubuntu.git
      dockerfile: Dockerfile

当您使用以下工具运行此功能时:

docker-compose up --build

它将自动拉动git存储库(master分支),构建ubuntu映像并运行它。

我在TFS上有一个存储库,其中有一个dockerfile,当您手动拉取并运行它时,它就会工作。所以,git clone要克隆repo,docker build构建映像,然后运行docker-it ubuntu:14.04(例如,使用与TFS中上述相同的回购)。

但是,我上面使用的docker compose方法不起作用,因为TFS的Git URI无法解析。它需要一个HTTPS Git URI(“https://server-name/repository-name.git)但在TFS中,Git URI的格式为https://server-name/tfs/Default/project-name/_git/repository-name").

docker compose无法解析此URI并输出此错误:

服务“…”未能生成:{'message':'下载远程上下文时出错http://.../tfs/Default/.../_git/...:未能获得http://.../tfs/Default/.../_git/...状态为401未经授权:\r\n。。。

HTML只是一个错误页面,错误代码如下:

完整的HTML在这里。

TF400813:资源不可用于匿名访问。需要客户端身份验证。

有什么办法可以让docker-comush与TFS Git URI一起工作吗?

更新:

我已经用令牌化的URI测试过了:

git克隆https://token@servername/tfs/Default/projectname/_git/repositoryname

这是可行的,但在docker compose中使用相同的URI。yml文件不存在-出现以下错误:

ERROR: compose.cli.errors.log_api_error: error detecting content type for remote http://...@.../tfs/Default/.../_git/...: unsupported Content-Type "text/html; charset=utf-8"`

我认为这只是返回TFS上的错误页面,用于无法访问的资源?

共有1个答案

东郭鹤龄
2023-03-14

您展示的示例(带有https://github.com/dockerfile/ubuntu.gitURL)假定Git存储库是可公开访问的,不需要身份验证。另一方面,您的TFS URL确实需要您进行身份验证。

最好的方法是创建个人访问令牌。这将允许您限制对资源的访问并支持简化的身份验证方案(如HTTP Basic)。为“代码(读取)”创建个人访问令牌并记下它。

现在,您可以在用于连接的URL中指定个人访问令牌:

https://username:personal_access_token@servername/tfs/Default/projectname/_git/repositoryname

例如:

https://ethomson:a3bwcvdie7figfhriij4krlfmznko7pgqmr7s7tbuwvdw7xiybza@tfs:8080/tfs/DefaultCollection/Test/_git/testrepo

请注意,您的个人访问令牌类似于密码,因此应该加以保护。如果不想将个人访问令牌直接存储在docker compose中。yml然后可以使用环境变量:

services:
  ubuntu:    
    image: ubuntu-fromrepo
    build:       
      context: https://username:${PAT}@servername/tfs/Default/projectname/_git/repositoryname
      dockerfile: Dockerfile
 类似资料:
  • 问题内容: 这是我第一次尝试使用ui-router。 这是我的app.js 如您所见,我有两种状态。我正在尝试这样注册状态: 但是我越来越 无法从状态“解析”“注册” 例外。这里有什么问题? 问题答案: 这种错误通常表示(JS)代码的某些部分未加载。里面的状态不见了。 有一个可行的例子 我不是离子技术方面的专家,因此此示例应表明它可以正常工作,但我使用了更多技巧(用于制表符的父级) 这是一个调整后

  • 我有一个基本的 OpenShift 源集群,从 现在,在默认的“MyProject”中,我想从 git 存储库构建一个源代码,但它失败并出现错误 甚至我试着设置gogs并将github.com上的公共托管源代码迁移到gogs pod上,但是抛出了同样的错误。 请告知在OpenShift集群设置期间是否需要任何额外的网络设置,以便访问github.com或任何其他公共域。我能感觉到这是一个网络问题,

  • 问题内容: 这是我在JSP文件中的Java代码。我正进入(状态 无法解析Base64Encoder。 为什么会这样呢?我必须添加与相关的内容。任何建议将不胜感激。 问题答案: 看起来您正在使用Web应用程序中包含的jar中不存在的类。您可以尝试以下吗?如有必要,请进行调整,我只是在查看通用文档,然后将其输入- 转到http://commons.apache.org/codec/index.html

  • 问题内容: 因此,我直接从Google的android网站复制了此教程示例内容,却收到一个错误,指出R.id无法解决。 这是我的Java文件 这是我的 问题答案: 您必须导入您的R类 同样,如需求发布一样,您必须为布局使用名称空间。

  • 问题内容: 之前一切正常。然后,我碰巧将一个新的xml文件添加到布局中。现在,当setContentView指向(R.layout.menu)时,我的一个类给出了错误。Eclipse告诉我R.layout.menu无法解析。我不知道为什么。我在布局文件夹中定义了一个称为菜单的布局。 有什么建议? 问题答案: 您是否执行过项目>清洁?有时,您只需要让Eclipse重新生成R文件即可。