簡體   English   中英

如何使用IBM Cloud Toolchain訪問node js應用程序中的環境變量?

[英]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

我已經在IBMCloud上部署了使用WatsonAssistant的CloudFoundry應用程序,並且得到了這種形狀的變量。

process.env.CONVERSATION_WORKSPACE || '在未定義變量時使用它(XXXX-XXXX)'

process.env.CONVERSATION_ASSISTANT || 'XXXX-XXXX-XXXXX-XXXX'

您也可以使用

.env文件用於本地環境

在IBMCloud上,我設置了這種形狀的變量。

在此處輸入圖片說明

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM