AWS codebuild没有传递环境变量?

Jam*_*111 1 amazon-web-services docker aws-codepipeline aws-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...'
Run Code Online (Sandbox Code Playgroud)

没有我的环境变量.

我设置了DB_PASS,DB_USER,DB_NAME,DB_HOST - 这些都没有打印出来.

我尝试创建一个新的代码生成并添加环境变量,但没有运气.

请注意,它正在构建一个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 $1" >&2
      exit 1
    fi
    return $status
}

mytest knex migrate:latest 
Run Code Online (Sandbox Code Playgroud)

这样做是运行knex迁移(js脚本) - 如果失败,我们回滚迁移并退出构建.

小智 5

Docker在构建时不会将主机级环境变量传递给容器,因此默认情况下不会提供CodeBuild的环境变量.但是,使用构建参数可以将环境变量链接到容器.

例如,采用以下Dockerfile:

FROM ubuntu:14.04

ARG foo
ENV MYVAR=$foo
RUN echo $MYVAR
Run Code Online (Sandbox Code Playgroud)

您可以使用以下内容在容器中设置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
Run Code Online (Sandbox Code Playgroud)

对于您的特定用例,请在docker build --build-arg标志中提供环境变量值(例如--build-arg db_user=$DB_USER),然后ENV在Dockerfile中设置arg的值.