在 TeamCity 中运行 powershell 脚本时出现错误,但在控制台中没有错误

Running powershell script inside TeamCity exits with error, but no error in console

我的一个 powershell 构建步骤遇到了一个问题,该问题似乎只有在从 TeamCity 中运行时才会发生。我可以从 powershell 控制台运行相同的文件而不会出错。

$loadedAssembly = [System.Reflection.Assembly]::LoadFrom("C:\powershell\AWSSDK.dll")
$accessKeyID="1234"
$secretKeyID="1234"
$client=[Amazon.AWSClientFactory]::CreateAmazonEC2Client($accessKeyID,$secretKeyID)

TeamCity 中的错误是

[04:38:22][Step 2/2] T:\TeamCity\BuildAgent2\temp\buildTmp\powershell2271598119506819752.ps1 : 
[04:38:22][Step 2/2] Exception calling "CreateAmazonEC2Client" with "2" argument(s): "No 
[04:38:22][Step 2/2] RegionEndpoint or ServiceURL configured"
[04:38:22][Step 2/2]     + CategoryInfo          : NotSpecified: (:) [Write-Error], MethodInvocatio 
[04:38:22][Step 2/2]    nException
[04:38:22][Step 2/2]     + FullyQualifiedErrorId : System.Management.Automation.MethodInvocationExc 
[04:38:22][Step 2/2]    eption,powershell2271598119506819752.ps1
[04:38:22][Step 2/2]  
[04:38:22][Step 2/2] Process exited with code 1

感谢任何帮助

如果您从 EC2 实例内部使用 powershell 控制台,系统很可能会提示您设置默认区域。如果您在 SDK 商店中设置了默认区域,则该配置为 shared between AWS Powershell and the AWS .NET SDK

此配置 未在 Windows 用户之间共享 ,因此您的 TeamCity 代理很可能 运行 在其他用户(系统用户)上?) 不知道您在控制台中所做的配置更改。

几个简单的选项:

  1. 使用不同的 CreateAmazonEC2Client constructor 明确指定您所在的地区。该区域似乎是此初始步骤中唯一缺少的数据。

示例:

public static AmazonEC2 CreateAmazonEC2Client(
    string awsAccessKey,
    string awsSecretAccessKey,
    RegionEndpoint region
)
  1. 改用AWS Powershell Tools。您可能会发现以编程方式管理您的凭据和配置更容易,尤其是对于像 TeamCity 这样的东西(其中 powershell 可能不会被您用于 RDP 到 EC2 实例的同一 windows 用户调用,或者更重要的是,您在 您的 powershell 会话中管理配置的同一用户)它很有用,因为您可以通过 Initialize-AWSDefaults.
  2. 显式设置会话默认值