Azure-功能:需要Creds的子模块:致命:无法读取用户名

时间:2017-03-17 16:13:57

标签: git azure deployment continuous-deployment azure-functions

我有一个Azure功能应用程序,可以从VisualStudio.com Team Services git存储库继续部署。它利用子模块。其中一个子模块在GitHub上公开可用,它可以很好地加载而没有任何问题。

另一个子模块在VisualStudio.com Team Services Git仓库(与主仓库相同的帐户下)后面得到保护。此子模块在部署时出错。

Based on information provided by Microsoft,使用以下两个git命令启动子模块:

git submodule sync
git submodule update --init --recursive --force

这些命令中的第一个似乎正确执行,而第二个命令似乎错误输出。以下是输出:

Cloning into 'secure-submodule'...
Fatal: COMException encountered.\r
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for ''https://myVSStudio.visualstudio.com': Invalid argument
fatal: clone of 'https://myVSStudio.visualstudio.com/DefaultCollection/_git/secure-submodules' into submodule path 'secure-submodules' failed

我假设这是因为第二个子模块需要凭据,但我不确定如何提供它。

由于主要项目的持续部署是从受保护的git存储库中提取的,我认为子模块可以做同样的事情。

2 个答案:

答案 0 :(得分:2)

作为一种解决方法,我更新了.gitmodules文件,以便URL包含用户名和密码,并创建了一个Personal Access Token以在URL中使用。

e.g。在.gitmodules中,网址已更改:

[submodule "mySub"]
    path = mySub
    url = https://mysub:PERSONAL_ACCESS_TOKEN_VALUE@YOUR_GIT_REPO_URL

可以通过以下方式设置:

https://YOUR_SUB_DOMAIN.visualstudio.com/_details/security/tokens

当我创建个人访问令牌时,我将其限制为仅对代码读取操作。

我不喜欢这个解决方案(我希望其他人有更好的解决方案):

  1. 个人访问令牌将返回主项目的源代码控制。
  2. 我没有看到将个人访问令牌限制为只有一个的方法 存储库,因此该令牌可用于读取我拥有的任何存储库 访问。
  3. 您必须指定令牌有效的时间段,最长的时间段是一年。这在某些方面是好的,但我确信在一年内我会完全忘记我做了什么来使这个工作,我确信错误信息将不那么明显。

答案 1 :(得分:1)

我刚刚在私有代理上运行Azure管道时遇到了同样的问题,该解决方案可能适合您所拥有的解决方案。我已经在运行git config --global credential.helper cache的主机代理上配置了git凭据缓存,分别输入了用户名和密码(分别名为Personal Access Token和Token)。 git config --global credential.helper store .git-credentials 上存储了https://[pat_name]:[token]@[owner].visualstudio.com这样的字符串,在我的情况下不起作用,但可能会对您有所帮助。我知道您可能已经摆脱了这个问题,但我希望它可以帮助仍在为此问题上挣扎的任何人。