2

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

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

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

4

2 回答 2

4

如果您只需要 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可以在其余 api 中执行 POST/PUT/DELETE 的帐户和密码。

于 2013-09-14T10:03:25.237 回答
1

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

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

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

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

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

于 2013-10-14T11:03:34.760 回答