首页 > 解决方案 > Jenkins:使用 AWS CLI 命令运行 Windows Powershell 脚本的问题

问题描述

全部。我是与 Jenkins 合作的新手,我将感谢您的帮助。

我有一个“build&publishLambda.ps1”powershell 脚本,用于将压缩的 Lambda 代码推送到 AWS S3 并更新 Lambda 以使用新的代码版本。在此脚本中,我使用以下命令为会话获取正确的 AWS 凭证:

try {
    Initialize-AWSDefaultConfiguration -ProfileName <Profile> -Region <Region>
    Write-Host "STEP 1: Authorization for accessing S3 was successfull." -ForegroundColor green `n
}
catch {
    Write-Host $_ -ForegroundColor red `n 
    Write-Error "STEP 1: Authorization for accessing S3 failed." -ErrorAction:Stop
}

当我在本地运行此脚本时 - 一切正常。

此外,我有一个 Jenkins 构建作业,其中包含一个调用此 powershell 脚本的步骤(启用了“错误停止”和“使用 PowerShell 配置文件”)。我在 Jenkins 服务器机器上创建了相同的 AWS 配置文件 + 当我在 Jenkins 服务器上手动运行此脚本时,一切也都很好。

但是当我在 Jenkins 构建步骤中调用脚本时:

. "$ENV:WORKSPACE\build&publishLambda.ps1" -env dev

我收到以下错误:

16:17:29 [Project] $ powershell.exe -NonInteractive -ExecutionPolicy Bypass -File C:\Windows\TEMP\jenkins2516545345990457969.ps1
16:17:48 Windows PowerShell is in NonInteractive mode. Read and Prompt functionality is not available. 
16:17:48 
16:17:48 C:\Program Files (x86)\Jenkins\workspace\Project\build&publishLamdba.ps1 : STEP 1: Authorization for accessing S3 failed.
16:17:48 At C:\Windows\TEMP\jenkins2516545345990457969.ps1:2 char:1
16:17:48 + . "$ENV:WORKSPACE\build&publishLamdba.ps1" -env dev
16:17:48 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16:17:48     + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
16:17:48     + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,build&publishLamdba.ps1
16:17:48  
16:17:48 Build step 'PowerShell' marked build as failure

请你弄清楚我做错了什么,错误的原因是什么以及如何解决这个问题。提前致谢

标签: amazon-web-servicespowershelljenkinsaws-cli

解决方案


Alex B 的第一条评论解决了我的问题。这里是:

“看起来您需要为执行 Jenkins 任务的实例分配一个 AWS 实例角色(首选方式,但有点复杂,请参阅https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles- for-amazon-ec2.html)或在实例中包含短期 AWS 凭证(请参阅https://docs.aws.amazon.com/cli/latest/reference/sts/)并将临时凭证设为公共环境变量(请参阅https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html:公开 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION)“


推荐阅读