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 文件中。
我们在 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 文件中。