![](/img/trans.png)
[英]Unable to access environment variables in google cloud (node js express app)
[英]How to access environment variables in node js app using IBM Cloud Toolchain?
對於在IBM Cloud上托管並使用Watson Assistant的Node Cloud Foundry應用程序,我們已經在IBM Cloud的工具鏈中構建了管道。 我們在工具鏈的部署階段遇到了麻煩-使用我們的環境變量調用Assistant API時收到驗證錯誤。
當我們使用相同的環境變量在本地運行應用程序時,一切正常。 我們可以看到在Deploy階段可以訪問在工具鏈的Setup階段中定義的環境變量(我們可以使用cf env在Deploy Stage日志中打印它們,並且在IBM Cloud App Runtime UI中設置並顯示環境變量),但是部署階段的應用程序節點運行時無法訪問它們(它們是未定義的,從而在下面顯示的日志中導致錯誤)。
在應用程序文件(節點js)中,我們正在使用process.env.VARIABLE_NAME訪問環境屬性。
如果我們在IBM Cloud App中手動設置環境變量–然后從我們的本地終端cf push,那么該應用程序也可以正常工作。
請參閱下面在設置和部署階段中使用的bash腳本。 構建階段成功運行。
日志錯誤:
[APP/PROC/WEB/0] ERR Error: Insufficient credentials provided in constructor argument. Refer to the documentation for the required parameters. Common examples are username/password and iam_access_token.
[APP/PROC/WEB/0] ERR at AssistantV2.BaseService.initCredentials (/home/vcap/app/node_modules/ibm-cloud-sdk-core/lib/base_service.ts:317:15)
[APP/PROC/WEB/0] ERR at AssistantV2.BaseService (/home/vcap/app/node_modules/ibm-cloud-sdk-core/lib/base_service.ts:153:27)
[APP/PROC/WEB/0] ERR at new AssistantV2 (/home/vcap/app/node_modules/ibm-watson/assistant/v2.ts:51:5)
安裝階段腳本:(在此階段,環境屬性被定義為安全屬性。)
#!/bin/bash
cf push "${CF_APP}"
# Set environment variables that will be used after build the app
cf set-env "${CF_APP}" WATSON_ASSISTANT_APIKEY "${WATSON_ASSISTANT_APIKEY}"
cf set-env "${CF_APP}" WATSON_ASSISTANT_WORKSPACE "${WATSON_ASSISTANT_WORKSPACE}"
cf set-env "${CF_APP}" WATSON_ASSISTANT_ASSISTANT_ID "${WATSON_ASSISTANT_ASSISTANT_ID}"
# Restage app to get the new credentials availables
cf restage "${CF_APP}"
部署階段腳本:(或多或少相當於cf push)
#!/bin/bash
# Push app
if ! cf app $CF_APP; then
cf push $CF_APP
echo "no existing app, so doing fresh push"
else
OLD_CF_APP=${CF_APP}-OLD-$(date +"%s")
rollback() {
set +e
if cf app $OLD_CF_APP; then
cf logs $CF_APP --recent
cf delete $CF_APP -f
cf rename $OLD_CF_APP $CF_APP
fi
exit 1
}
set -e
trap rollback ERR
cf rename $CF_APP $OLD_CF_APP
cf push $CF_APP
cf delete $OLD_CF_APP -f
fi
# Export app name and URL for use in later Pipeline jobs
export CF_APP_NAME="$CF_APP"
export APP_URL=http://$(cf app $CF_APP_NAME | grep -e urls: -e routes: | awk '{print $2}')
# View logs
#cf logs "${CF_APP}" --recent
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.