15

我正在使用 AWS CodeBuild 和 Terraform 来自动部署基于 Lambda 的服务。我有一个非常简单buildscript.yml的方法来完成以下工作:

  • 获取依赖项
  • 运行测试
  • 获取 AWS 凭证并保存到文件(详情如下)
  • 获取 creds 文件
  • 运行 Terraform

“获取 creds 文件”这一步是我遇到困难的地方。我有一个简单的 bash one-liner,它可以抓取 AWS 容器的凭据curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,然后将它们保存到以下格式的文件中:

export AWS_ACCESS_KEY_ID=SOMEACCESSKEY
export AWS_SECRET_ACCESS_KEY=MYSECRETKEY
export AWS_SESSION_TOKEN=MYSESSIONTOKEN

当然,显而易见的步骤是简单地创建source这个文件,以便可以将这些变量添加到我的环境中供 Terraform 使用。但是,当我这样做时source /path/to/creds_file.txt,CodeBuild 会返回:

[Container] 2017/06/28 18:28:26 Running command source /path/to/creds_file.txt
/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: source: not found

我试图通过安装sourceapt但后来我收到一个错误,说source找不到(是的,我已经运行了apt update等)。我将标准 Ubuntu 映像与 Python 2.7 环境一起用于 CodeBuild。我该怎么做才能在 Codebuild 中获取 Terraform 工作凭据以获取此凭据文件的源代码。

谢谢!

4

5 回答 5

20

尝试使用.而不是source. source不符合 POSIX。ss64.com/bash/source.html

于 2017-06-28T19:35:17.457 回答
9

CodeBuild 现在支持bash作为您的默认 shell。你只需要在你的buildspec.yml.

env:
  shell: bash

参考:https ://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax

于 2020-06-26T06:48:20.230 回答
4

AWS CodeBuild 映像附带符合 POSIX 的外壳。您可以在此处查看图像中的内容:https ://github.com/aws/aws-codebuild-docker-images 。

如果您使用特定的 shell 功能(例如源代码),最好将命令包装在脚本文件中,并使用 shebang 指定您希望执行命令的 shell,然后从 buildspec.yml 执行此脚本.

构建脚本.sh

     #!/bin/bash
      <commands>
      ...

buildspec.yml(片段)

build: commands: - path/to/script/build-script.sh

于 2017-06-28T19:56:32.150 回答
4

我有一个类似的问题。我通过直接调用脚本来解决它/bin/bash <script>.sh

于 2018-10-25T11:03:20.090 回答
1

我没有足够的声誉发表评论,所以这里是杰弗里现场回答的延伸。

以防万一您的文件名以点(。)开头,以下将失败

. .filename

您将需要使用目录名称来限定文件名,例如

 . ./.filename
于 2020-01-31T07:08:45.703 回答