【问题标题】:AWS codebuild not passing down environment variables?AWS codebuild 没有传递环境变量?
【发布时间】:2017-06-25 12:03:01
【问题描述】:

我们在 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 - 这些都没有打印出来。

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

请注意,它正在构建一个 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 

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

【问题讨论】:

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


    【解决方案1】:

    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 的值。

    【讨论】:

      【解决方案2】:

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

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

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

      谢谢!

      【讨论】:

      • 一个 .sh 文件正在由 Dockerfile 运行,并且该 bash 文件正在运行一些 js。看看我的编辑:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 2017-06-17
      • 2016-01-10
      • 2020-09-29
      • 1970-01-01
      相关资源
      最近更新 更多