无法在 AWS Codebuild 中 运行 `source`
Cannot run `source` in AWS Codebuild
我正在使用 AWS CodeBuild 和 Terraform 自动部署基于 Lambda 的服务。我有一个非常简单的 buildscript.yml
可以完成以下操作:
- 获取依赖项
- 运行 测试
- 获取 AWS 凭证并保存到文件(详见下文)
- 来源信用文件
- 运行 地形
步骤"source the creds file"是我遇到困难的地方。我有一个简单的 bash 单行程序,它从 curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
中获取 AWS 容器凭证,然后将它们保存到以下格式的文件中:
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 returns:
[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
我曾尝试通过 apt
安装 source
,但随后我收到一条错误消息,指出无法找到 source
(是的,我已经 运行 apt update
等)。我在 CodeBuild 的 Python 2.7 环境中使用标准 Ubuntu 图像。我该怎么做才能在 Codebuild 中获取 Terraform 工作凭据以获取此凭据文件。
谢谢!
尝试使用 .
而不是 source
。 source
不符合 POSIX。 ss64.com/bash/source.html
AWS CodeBuild 映像随 POSIX 兼容 shell。您可以在此处查看图像中的内容:https://github.com/aws/aws-codebuild-docker-images.
如果您正在使用特定的 shell 功能(例如源代码),最好将您的命令包装在一个脚本文件中,并在脚本文件中指定 shell 您想要的命令执行,然后从 buildspec.yml.
执行此脚本
构建-script.sh
#!/bin/bash
<commands>
...
buildspec.yml(片段)
build:
commands:
- path/to/script/build-script.sh
我遇到了类似的问题。我通过 /bin/bash <script>.sh
直接调用脚本解决了这个问题
我没有足够的声誉来发表评论,所以这里是对 jeffrey 现场回答的扩展。
如果您的文件名以点 (.) 开头,则以下操作将失败
. .filename
您需要使用目录名来限定文件名,例如
. ./.filename
CodeBuild 现在支持 bash
作为默认值 shell。您只需要在 buildspec.yml
.
中指定它
env:
shell: bash
参考:https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax
我正在使用 AWS CodeBuild 和 Terraform 自动部署基于 Lambda 的服务。我有一个非常简单的 buildscript.yml
可以完成以下操作:
- 获取依赖项
- 运行 测试
- 获取 AWS 凭证并保存到文件(详见下文)
- 来源信用文件
- 运行 地形
步骤"source the creds file"是我遇到困难的地方。我有一个简单的 bash 单行程序,它从 curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
中获取 AWS 容器凭证,然后将它们保存到以下格式的文件中:
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 returns:
[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
我曾尝试通过 apt
安装 source
,但随后我收到一条错误消息,指出无法找到 source
(是的,我已经 运行 apt update
等)。我在 CodeBuild 的 Python 2.7 环境中使用标准 Ubuntu 图像。我该怎么做才能在 Codebuild 中获取 Terraform 工作凭据以获取此凭据文件。
谢谢!
尝试使用 .
而不是 source
。 source
不符合 POSIX。 ss64.com/bash/source.html
AWS CodeBuild 映像随 POSIX 兼容 shell。您可以在此处查看图像中的内容:https://github.com/aws/aws-codebuild-docker-images.
如果您正在使用特定的 shell 功能(例如源代码),最好将您的命令包装在一个脚本文件中,并在脚本文件中指定 shell 您想要的命令执行,然后从 buildspec.yml.
执行此脚本构建-script.sh
#!/bin/bash
<commands>
...
buildspec.yml(片段)
build:
commands:
- path/to/script/build-script.sh
我遇到了类似的问题。我通过 /bin/bash <script>.sh
我没有足够的声誉来发表评论,所以这里是对 jeffrey 现场回答的扩展。
如果您的文件名以点 (.) 开头,则以下操作将失败
. .filename
您需要使用目录名来限定文件名,例如
. ./.filename
CodeBuild 现在支持 bash
作为默认值 shell。您只需要在 buildspec.yml
.
env:
shell: bash
参考:https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax