【问题标题】:Pre-Authenticate Powershell WebClient requests to Team City 8.0 REST API对 Teamcity 8.0 REST API 的预身份验证 Powershell WebClient 请求
【发布时间】:2013-08-22 14:25:03
【问题描述】:

我正在尝试在我的 Team City 构建步骤中运行 Powershell 脚本。

脚本使用 WebClient 连接到 Team City 的 REST API;目前,我必须登录 Team City 并将用户名和密码硬编码为我的 Powershell 构建步骤中的参数。

我想知道是否有人知道一种方法可以在我的 Powershell 脚本中传递我目前用来向 Team City 进行身份验证的凭据,而无需硬编码任何密码

【问题讨论】:

  • 如果不对其进行硬编码,那么您希望何时为您的 powershell 脚本提供凭据?
  • 我正在尝试使用我提供的凭据登录 Team City,在提供用户名和密码后,运行这些脚本的唯一可能方式是通过 Team City Web UI访问服务器

标签: rest authentication powershell webclient teamcity-8.0


【解决方案1】:

如果您只需要 REST api 中的读取权限(即您不想执行 POST/PUT/DELETE,仅 GET),请使用 teamcity 生成的用户名和密码。

此用户名/密码对在每次构建时生成,并且仅在构建运行期间有效。这是您可以在您的 powershell 脚本中访问它们的方式:

  • 读取 $env:TEAMCITY_BUILD_PROPERTIES_FILE 环境变量,该变量包含为此构建生成/有效的构建属性文件的完整路径

  • 这个文件是一个简单的 key=value java prop 文件。您需要解析出 teamcity.auth.userId 和 teamcity.auth.password 属性的值。或者更好的是,始终在脚本初始化阶段解析所有道具,并将它们放入 powershell 脚本中的哈希表中。

如果您需要对 REST api 的写入权限,则不能使用此 uid/pwd 对。为此,我在 osx 上使用钥匙串,在 Windows 上使用 keepass db。 Keepass 有一个不错的 .net api,您可以从 powershell 访问它。创建一个新的keepass db,使用密钥而不是密码解锁,确保运行构建代理的用户可以访问此密钥而没有其他人,然后使用keepass api解锁数据库,读出你的teamcity admin可以在 rest api 中执行 POST/PUT/DELETE 的帐号和密码。

【讨论】:

  • 除了解析脚本中的属性文件,您还可以将$username$password 声明为powershell 脚本参数,并通过“脚本参数”文本框从构建步骤配置页面传递它们像这样:%system.teamcity.auth.userId% %system.teamcity.auth.password%。您也可以将服务器 url 传递为%teamcity.serverUrl%
  • 这正是我最终要做的,在发布问题时,我对 Team City 及其 REST API 非常不熟悉。我通过 TC 运行的大多数脚本现在都使用相同的方法进行自动身份验证,一些构建要求用户提供自己的帐户名和密码,如下所述:blog.jetbrains.com/teamcity/2013/05/…
【解决方案2】:

感谢您的回答,但我们最终提供了用户名和密码作为构建参数。

TeamCity 的内置密码保护功能帮助了我们。

通过这种方式,我们使用一个帐户来运行我们的 powershell 脚本,但我们仍然可以从他们用于登录 Web UI 的凭据中看到是谁启动了构建。

因此,我们保持了可追溯的责任,并停止了用户名和密码的不断输入。

更多信息:confluence.jetbrains.com/display/TCD7/Typed+Parameters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多