如何使用IBM Cloud Toolchain访问node js应用程序中的环境变量?

时间:2019-06-10 15:07:33

标签: node.js ibm-cloud

对于在IBM Cloud上托管并使用Watson Assistant的节点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

1 个答案:

答案 0 :(得分:0)

我已经在IBMCloud上部署了使用WatsonAssistant的CloudFoundry应用程序,并且得到了这种形状的变量。

process.env.CONVERSATION_WORKSPACE || '当未定义变量时使用此选项(XXXX-XXXX)'

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

您也可以使用

.env用于本地环境的文件

在IBMCloud上,我设置了这种形状的变量。

enter image description here

enter image description here