![](/img/trans.png)
[英]AWS CodeBuild Batch configuration not passing environment variables
[英]AWS codebuild not passing down environment variables?
在代碼構建過程中,我們需要環境變量。 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腳本)-如果失敗,我們將回滾遷移並退出構建。
Docker在構建時不會將主機級環境變量傳遞給容器,因此默認情況下不會提供CodeBuild的環境變量。 但是,使用構建參數可以將環境變量鏈接到容器。
例如,使用以下Dockerfile:
FROM ubuntu:14.04
ARG foo
ENV MYVAR=$foo
RUN echo $MYVAR
您可以使用以下命令在容器中設置MYVAR的值:docker 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 db_user=$DB_USER
build --build-arg
標志中提供環境變量值(例如--build-arg db_user=$DB_USER
),然后通過Dockerfile中的ENV
設置arg的值。
肯定您提到的環境變量並沒有預期可在CodeBuild上運行的所有構建環境變量(包括您擁有的自定義環境變量)。
是否可以共享有關您的構建的更多信息? 您要在構建命令中啟動新的shell(例如bash)(可能替換現有環境“ / usr / bin / env”)嗎? 您的項目配置是什么(特別是docker映像)?
您也可以嘗試覆蓋其中一個項目的命令,並簡單地運行“ env”來驗證您是否看到了預期的環境變量。 這只是為了消除環境是問題還是命令。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.