【问题标题】:run .sh script via Jenkins to execute aws command error通过 Jenkins 运行 .sh 脚本以执行 aws 命令错误
【发布时间】:2017-11-02 09:33:05
【问题描述】:

我的问题是我尝试执行 shell 脚本以通过 Jenkins 将创建的文件从 msbuild 复制到 AWS s3

然后我添加了新的构建步骤“Execute Shell”并设置为通过命令执行 shell 脚本:sh publishS3.sh 没有任何反应,并且文件不会出现在 s3 存储桶中。 我的 Jenkins 使用本地 Windows 服务器。

然后我尝试通过在 Jenkins 本地目录中键入 sh publishS3.sh 来执行 shell 脚本,一切正常,文件被连续复制到 s3 存储桶,但是如果我尝试从 jenkins 执行此操作,则没有任何反应。我的 publishS3.sh 脚本是:

#!/bin/bash
aws s3 cp  Com.VistaDraft.Common.dll s3://download.vistadraft.com/MVP

我试图通过在末尾添加命令 > output.txt 来检查执行后收到的女巫输出,但 Jenkins 会生成一个空文件。如果我尝试在本地做同样的事情,我会收到一条消息,说我将文件复制到 s3。我设置 jenkins C:\Program Files\Git\git-bash.exe 的 shell 脚本路径并在本地使用 git-bash.exe。也许谁知道问题出在哪里?请建议。

【问题讨论】:

  • 如果命令产生错误,它可能不会在 stdout 上产生任何东西,所以你也需要使用command > output.txt 2>&1 捕获 stderr。一般来说,请确保 Jenkins / Jenkins 作业具有访问存储桶的正确凭据
  • @arco444 它有助于解决问题!我刚刚将aws路径添加到环境变量中,一切正常!请添加您的评论以回答我接受!

标签: bash shell amazon-web-services jenkins amazon-s3


【解决方案1】:

您可以尝试在脚本的第一行添加-ex,以便您查看它在做什么并简化调试:

#!/bin/bash -ex
# rest of script

确保aws 工具位于 Jenkins 运行脚本的环境的 PATH 中。如果您指定命令的完整路径可能会有所帮助。

您可以在脚本中输入which aws 以查看发生了什么。

【讨论】:

  • #!/bin/bash -ex 没有帮助:(我尝试将 which aws 和它的 /c/Program Files/Amazon/AWSCLI/aws 放在本地,但如果我添加哪个aws > test.txt 在脚本末尾并从 jenkins 执行它会生成一个空的 test.txt 文件。