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的值.
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |