1

我们在代码构建过程中需要环境变量。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 脚本)——如果失败,我们将回滚迁移并退出构建。

4

2 回答 2

6

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

例如,使用以下 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

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

于 2017-02-13T21:15:25.537 回答
0

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

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

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

谢谢!

于 2017-02-08T19:09:26.493 回答