我们在 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...'
我的环境变量都没有。
我设置了DB_PASS,DB_USER,DB_NAME,DB_HOST - 这些都没有打印出来。
我尝试创建一个新的codebuild&添加环境变量但没有运气。
请注意,它正在构建一个码头工人容器&当我尝试连接到我的postgres数据库时失败,因为环境变量没有传递下来(密码,主机等)
在我的Dockerfile中,我运行了以下bash文件:
#!/bin/bash
echo "running"
function mytest {
"$@"
local status=$?
if [ $status -ne 0 ]; then
knex migrate:rollback
echo "Rolling back knex migrate $1" >&2
exit 1
fi
return $status
}
mytest knex migrate:latest
这是在运行knex迁移(js脚本) - 如果失败,我们回滚迁移&退出构建。
答案 0 :(得分:5)
Docker在构建时不会将主机级环境变量传递给容器,因此默认情况下不会提供CodeBuild的环境变量。但是,使用build arguments可以将环境变量链接到容器。
例如,请使用以下Dockerfile:
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 --build-arg
标志中提供环境变量值(例如--build-arg db_user=$DB_USER
),然后在Dockerfile中通过ENV
设置arg的值。
答案 1 :(得分:0)
您提到的环境变量肯定没有预期可用于CodeBuild上运行的构建的所有环境变量(包括您拥有的自定义环境变量)。
是否可以分享有关您的构建的更多信息?您是否在构建命令中启动了一个新shell(例如bash)(可能替换现有环境“/ usr / bin / env”)?您的项目配置是什么(具体为docker image)?
您也可以尝试覆盖其中一个项目的命令,只需运行'env'来验证您是否看到了预期的环境变量。这只是为了消除环境是问题还是命令。
谢谢!