我正在尝试在 Team City 构建步骤中运行 Powershell 脚本。
脚本使用 WebClient 连接到 Team City 的 REST API;目前,我必须登录 Team City 并将用户名和密码硬编码为 Powershell 构建步骤中的参数。
我想知道是否有人知道如何在我的 Powershell 脚本中传递我当前用于向 Team City 进行身份验证的凭据,而无需对任何密码进行硬编码
最佳答案
如果您只需要 REST api 中的读取访问权限(即您不想执行 POST/PUT/DELETE,只需 GET),则使用 teamcity 生成的用户名和密码。
此用户名/密码对是在每次构建时生成的,并且仅在构建运行期间有效。您可以通过以下方式在 powershell 脚本中访问它们:
读取 $env:TEAMCITY_BUILD_PROPERTIES_FILE 环境变量,该变量保存为此构建生成/有效的构建属性文件的完整路径
这个文件是一个简单的 key=value java prop 文件。您需要解析 teamcity.auth.userId 和 teamcity.auth.password 属性的值。或者更好的是,始终在脚本初始化阶段解析所有 props 并将它们放入 powershell 脚本中的哈希表中。
如果您需要对 REST api 进行写访问,则不能使用此 uid/pwd 对。为此,我在 osx 上使用钥匙串(keychain),在 Windows 上使用 keepass 数据库。 Keepass 有一个很好的 .net api,您可以从 powershell 访问它。创建一个新的 keepass 数据库,使其可使用 key 解锁,而不是使用密码,确保运行构建代理的用户有权访问此 key 而没有其他人,然后使用 keepass api 解锁数据库,读出您的 teamcity 管理员可以在其余API中执行POST/PUT/DELETE的帐户和密码。
关于rest - 预验证对 Team City 8.0 REST API 的 Powershell WebClient 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18383220/