AWS codebuild没有传递环境变量?

时间:2017-02-08 02:09:54

标签: amazon-web-services docker aws-codepipeline aws-codebuild

我们在 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脚本) - 如果失败,我们回滚迁移&退出构建。

2 个答案:

答案 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'来验证您是否看到了预期的环境变量。这只是为了消除环境是问题还是命令。

谢谢!