Bash 如何获得';应用程序URI';来自Bluemix Cloudfoundry应用程序的shell脚本?
我有一个Dev-Ops-Services管道,我正在使用它使用CloudFoundry和MongoDB自动设置MeteorJS应用程序(实际上只是一个NodeJS应用程序) 我在Dev Opts服务中有以下部署脚本:Bash 如何获得';应用程序URI';来自Bluemix Cloudfoundry应用程序的shell脚本?,bash,shell,awk,sed,ibm-cloud,Bash,Shell,Awk,Sed,Ibm Cloud,我有一个Dev-Ops-Services管道,我正在使用它使用CloudFoundry和MongoDB自动设置MeteorJS应用程序(实际上只是一个NodeJS应用程序) 我在Dev Opts服务中有以下部署脚本: ``` #!/bin/bash cf create-service compose-for-mongodb Standard mongodbbuzzy01 cf push "${CF_APP}" --no-start mongourl=$(cf env ${CF_APP} | eg
```
#!/bin/bash
cf create-service compose-for-mongodb Standard mongodbbuzzy01
cf push "${CF_APP}" --no-start
mongourl=$(cf env ${CF_APP} | egrep -o 'mongodb://.*"' | rev | cut -c 2- | rev); cf set-env ${CF_APP} MONGO_URL $mongourl
cf restage "${CF_APP}"
```
这允许我从VCAP_服务
获取mongourl,然后将其设置为MONGO_URL环境变量(在DevOps shell命令中)
我也需要为Meteor需要的根URL
做同样的事情。自从我上次使用sed/awk/grep脚本以来已经有20年了,我需要从cf env
文本中取出Bluemix应用程序的URI(该文本包含一些JSON)
cf env的结果是文本和JSON对象的混合(所以实际上只是文本)
在组织Buzzy/space dev中获取应用程序buzzy7build的环境变量作为adam。ginsburg@buzzy.buzz...
好啊
提供的系统:
{
“VCAP_服务”:{
“为mongodb撰写”:[
{
“全权证书”:{
……只是把细节说出来
}
}
}
{
“VCAP_应用程序”:{
“应用程序id”:“,
“应用程序名称”:“,
“应用程序URI”:[
""
],
...
因此,我需要一些帮助来使用Bluemix shellscrip提取
(当然,如果这是NodeJS,就很容易了)
在bluemixshell中没有jq
(我知道),所以只有sed、awk、grep等
谢谢你的帮助
谢谢
仅当无法使用jq
解析JSON
awk
中使用的逻辑是,它查找包含应用程序URI
的行,从匹配行中获取下一行,getline n
获取下一行,并存储在变量n
中。从收到的行中,我们使用gsub()删除“
和前导空格
您能否提供完整的JSON
,这是您实际输出的一个示例?测试命令很容易。@Inianthanks请看这里不清楚您在第36行的“application\u uri”或“uri”中使用的是哪一个:[
在第48行,我想它们都是一样的,所以either@Inian谢谢你,非常感谢
Getting env variables for app buzzy7build in org Buzzy / space dev as adam.ginsburg@buzzy.buzz...
OK
System-Provided:
{
"VCAP_SERVICES": {
"compose-for-mongodb": [
{
"credentials": {
.... just curring out details
}
}
}
{
"VCAP_APPLICATION": {
"application_id": "<some app id>",
"application_name": "<app name>",
"application_uris": [
"<the uri I am trying to get>"
],
...
awk '$0 ~ /application_uris/{getline n; gsub("\"|^[[:space:]]+","",n); print n}' file
<domain name>
"application_uris": [
"<domain name>"
]