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

时间:2015-01-09 05:06:00

标签: powershell amazon-web-services teamcity

我的一个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

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

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

此配置不在Windows用户之间共享,因此您的TeamCity代理很可能正在其他用户(系统用户?)上运行,而该用户不了解您的配置更改在控制台制作。

有两个简单的选择:

  1. 使用其他CreateAmazonEC2Client constructor明确指定您的区域。该区域似乎是此初始步骤中唯一缺少的数据。
  2. 示例:

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