【问题标题】:Azure Pipeline "Forgets" Authentication When Using TF.exe使用 TF.exe 时 Azure 管道“忘记”身份验证
【发布时间】:2021-01-05 15:36:08
【问题描述】:
  • 将本地构建服务器与 Azure DevOps Services 结合使用
  • 构建代理配置为使用在构建服务器上具有管理权限的 AD 帐户
  • Pipeline 执行一个 Powershell 脚本,该脚本又执行 tf.exe 实用程序
  • 具体命令为tf.exe vc workspaces /collection:[Azure collection address]
  • 命令失败并显示 F30063:您无权访问 [Azure 集合地址]
  • 认为问题可以通过为构建代理的用户/密码提供/login 开关来解决。但这似乎对workspaces 命令没有影响

这个问题可以通过以下方式暂时解决:

  • 使用构建代理使用的相同帐户登录构建服务器
  • 打开 Visual Studio 命令提示符
  • 运行命令:tf.exe vc workspaces /collection:[Azure collection address]
  • 此时显示微软登录界面e.g.
  • 为登录提供构建代理的凭据
  • 命令运行成功
  • 如果在此之后再次运行管道,它也会成功运行
  • 但是在看似可变的时间段(有时是几天)之后,此身份验证似乎过期,并且管道开始再次抛出“未经授权的访问”错误
  • 那么需要重复使用命令行的“修复”

需要做什么才能在管道(或 Powershell 脚本)中持久化身份验证,以便无需手动重新输入帐户信息?

【问题讨论】:

    标签: powershell azure-devops azure-pipelines


    【解决方案1】:

    默认情况下,Visual Studio 会自动缓存凭据。如果我们想更改登录凭据信息,我们需要清除缓存并重新输入新凭据。

    1. 打开命令提示符窗口并导航到 Visual Studio 安装路径:cd Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE​
    2. 使用 runas 命令启动 Visual Studio:runas /netonly /user:TFSCredentialUser devenv.exe
    3. 现在它会提示您输入用户的密码。请输入您的新密码以打开您的 Visual Studio。如果您输入错误的密码,Visual Studio 启动后会提示您再次输入密码。

    您也可以参考此ticket 来清理凭据

    【讨论】:

    • 按照引用票证中的说明删除了 VS 用于缓存的文件夹。凭证管理器没有用于运行管道/脚本的帐户条目,因此没有更改。使用适当的帐户凭据使用“runas”命令启动 VS。开始时,Team View 会显示消息“您无权访问 [Azure 集合地址]”。 Visual Studio 从不提示输入任何登录信息。我希望 TeamViewer 在此过程之后能够访问 Azure。
    • 嗨@user1617242,请检查Levi的答案,然后在这里分享结果。
    • 我不确定如何使用 OAuth 服务注册此管道,因为没有要注册的 URL(前提是我正确理解 OAuth 的工作原理;此外,不推荐使用文档状态 OAuth对于像这样的本地服务器)。尝试使用构建服务器代理的帐户生成 PAT,并将其作为密码包含在脚本中。那也没有用。 Levi 在他的帖子中提供的链接几乎就是我所面临的确切情况。他们似乎无法为这个问题提出令人满意的解决方案。不过,仍然愿意接受建议。
    • 您好,如果 Levi 的回答对您有帮助,请accept it 作为答案吗?因此,它可以帮助遇到相同问题的其他社区成员,我们可以存档此线程。谢谢。祝你今天过得愉快。 :)
    • Levi 的回答没有解决我的问题。但是他在回复中包含的link 描述了我遇到的完全相同的问题。不幸的是,这个问题也没有解决方案。
    【解决方案2】:

    您可以通过指定/loginType:OAuth 尝试使用System.accesstoken 登录构建管道。见下例:

    tf.exe workspaces /collection:https://collection.visualstudio.com/ /loginType:OAuth /login:.,$(System.AccessToken) /noprompt

    为了访问管道中的System.accesstoken。您需要编辑您的管道并单击将在其中运行命令行任务的代理作业节点,然后选择“允许脚本访问 OAuth 令牌”。请参阅here 了解更多信息。

    也请查看this 类似的帖子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-19
      • 2011-03-01
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多