AWS codebuild 没有传递环境变量?

AWS codebuild not passing down environment variables?

我们在 codebuild 过程中需要环境变量。 Codebuild 允许您在我已经完成的高级设置中设置环境变量。

现在,当 codebuild 运行时,它似乎不会向下传递这些环境变量。

我打印了 process.env & 这是我得到的:

NAME: '037fga72',
[Container] 2017/02/08 01:55:03 NPM_CONFIG_LOGLEVEL: 'info',
[Container] 2017/02/08 01:55:03 PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
[Container] 2017/02/08 01:55:03 PWD: '/usr/src/app',
[Container] 2017/02/08 01:55:03 SHLVL: '1',
[Container] 2017/02/08 01:55:03 HOME: '/root',
[Container] 2017/02/08 01:55:03 _: '/usr/local/bin/knex' } 'process.env variables...'

我的环境变量有 none 个。

我设置了 DB_PASS、DB_USER、DB_NAME、DB_HOST - None 打印出来了。

我尝试创建一个新的代码构建并添加环境变量,但没有成功。

请注意,它正在构建一个 docker 容器,当我尝试连接到我的 postgres 数据库时它失败了,因为没有传递环境变量(密码、主机等)

编辑

在我的 Dockerfile 中,我 运行 以下 bash 文件:

#!/bin/bash
echo "running"
function mytest {
    "$@"
    local status=$?
    if [ $status -ne 0 ]; then
        knex migrate:rollback 
      echo "Rolling back knex migrate " >&2
      exit 1
    fi
    return $status
}

mytest knex migrate:latest 

这是在做什么 运行 knex 迁移(一个 js 脚本)- 如果失败,我们回滚迁移并退出构建。

您提到的环境变量肯定没有预期可用于 CodeBuild 上的构建 运行 的所有环境变量(包括您拥有的自定义环境变量)。

是否可以分享有关您的构建的更多信息?您是否在构建命令中开始一个新的 shell(例如 bash)(可能替换现有环境“/usr/bin/env”)?您的项目配置是什么(docker 具体图像)?

您还可以尝试覆盖其中一个项目的命令,然后简单地 运行 'env' 来验证您是否看到了预期的环境变量。这只是为了消除环境或命令的问题。

谢谢!

Docker 不会在构建时将 host-level 环境变量传递给容器,因此默认情况下不会提供 CodeBuild 的环境变量。但是,使用 build arguments 您可以将环境变量链接到您的容器。

例如,取下面的Docker文件:

FROM ubuntu:14.04

ARG foo
ENV MYVAR=$foo
RUN echo $MYVAR

您可以在容器中设置 MYVAR 的值:docker build -t <tag> --build-arg foo=bar .

这是 docker build 期间的示例输出:

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:14.04
 ---> b969ab9f929b
Step 2 : ARG foo
 ---> Using cache
 ---> a6c71d477a6c
Step 3 : ENV MYVAR $foo
 ---> Running in 49efc25c81d9
 ---> ecfc651713b8
Removing intermediate container 49efc25c81d9
Step 4 : RUN echo $MYVAR
 ---> Running in 2fc43629aa44
bar
 ---> 86dd113f6c7b
Removing intermediate container 2fc43629aa44
Successfully built 86dd113f6c7b

对于您的特定用例,在您的 docker 构建 --build-arg 标志中提供环境变量值(例如 --build-arg db_user=$DB_USER),然后通过 [=16] 设置 arg 的值=] 在你的 Docker 文件中。