1

我有一个调用远程 EC2 上的批处理文件的 Bamboo 任务。该批处理文件执行测试,然后调用 PowerShell 脚本来解析测试。
最后,我获取了竹服务器的实例 ID,并通过 ssm 将测试结果发回。

当我尝试发送我的结果时,我的问题存在于 PowerShell 脚本中。我使用“describe-instances”来检索 Bamboo 服务器 ID:

Set-AWSCredential -StoreAs default -AccessKey <key> -SecretKey <key>

$instanceid = aws ec2 describe-instances --profile default --region "us-east-1" --filters 'Name=tag:Name,Values=Bamboo Server' --query 'Reservations[*].Instances[*].InstanceId' --output text

Send-SSMCommand -InstanceId $instanceId -DocumentName AWS-RunPowerShellScript -Parameter -Comment

*注意:我的 Bamboo 服务器与我的测试位于不同的 EC2 上。



所以,如果我从我的 Bamboo Build Plan 中调用批处理文件。“describe-instances”命令运行不正确。
但是,如果我在远程 EC2 上本地运行批处理文件,则该过程运行顺利。

我试过:
- “描述实例”的多种变体,包括 Get-EC2Instance 和其他。
- 我相信我的权限设置正确。但也许“描述实例”没有抓住它。我尝试了许多设置凭据的变体,包括 aws configure、从环境变量和文件手动加载。
- 我放入 Start-Sleeps 以确保我没有异步问题。

当我从 Bamboo 任务中调用它时,就像命令拒绝运行一样。

我注意到测试在本地前台运行,当从 Bamboo 调用时在后台运行。

我的问题可能是安全问题吗?就像从 Bamboo 运行不允许命令运行一样?我找不到任何来自 AWS 或 Bamboo 的文档来解释这一点。

有任何想法吗?

4

1 回答 1

0

天啊...

教训:不要混用和匹配 AWS CLI 和 AWSPowerShell。你会得到奇怪的结果。

首先:
我不是 100% 确定,但我相信凭据在命令之间传递的方式不同。似乎使用 Set-AWSCredential 设置每个会话的凭据会起作用。但事实并非如此。因此,您必须坚持使用 AWSPowerShell 命令。

第二:
说到 AWSPowerShell 命令。他们可能很棘手。我必须想出一个非常时髦的命令来捕获 Bamboo 服务器的实例 ID。我从内部网周围的其他线程和帖子中拼凑而成

$instance = (Get-EC2Instance -Filter @{Name="tag:Name";Value="Bamboo Server" }).Instances | Select-Object InstanceId

然后通过使用获取实际 ID$instance.InstanceId

编辑:@Curios - 我拒绝了您的编辑,因为:根据您的命名约定, $instance 是完全可以接受的,但非常欢迎您在脚本中将其命名为 $Instances 。而且,您是对的,Bamboo Server 确实指的是所有名为“Bamboo Server”的实例。我选择使用 tab:Name/Value 组合的原因是我们的架构将只有一个 Bamboo Server,但更新等可能会更改实例 ID,因此我需要通过抓取我们的“Bamboo Server”来允许此类更改它的实例 ID。其他人则需要根据他们的需要对命令进行独特的设置。

于 2018-01-29T21:28:29.783 回答