Cloud foundry 将存根运行程序引导服务器部署到PCF

Cloud foundry 将存根运行程序引导服务器部署到PCF,cloud-foundry,spring-cloud-contract,Cloud Foundry,Spring Cloud Contract,我们正在尝试使用stubrunner引导在Nexus(和本地repo)上提供一个Stub服务器和Stub 在我提交的其他问题的帮助下,我或多或少地在当地整理了一下 但现在,我想我将面临另一个问题,我又被困在了。。。我们将把存根服务器部署到PCF中进行冒烟测试。 我们可以愉快地说,curl pcf_主机/stubs,它将以配置的stub和端口号列表进行响应 但是存根将在某个端口上运行(我们甚至可以将其设置为静态,配置存根服务器),但我认为我们不能在443(或perhpas 80)以外的端口上调用P

我们正在尝试使用stubrunner引导在Nexus(和本地repo)上提供一个Stub服务器和Stub

在我提交的其他问题的帮助下,我或多或少地在当地整理了一下

但现在,我想我将面临另一个问题,我又被困在了。。。我们将把存根服务器部署到PCF中进行冒烟测试。 我们可以愉快地说,
curl pcf_主机/stubs
,它将以配置的stub和端口号列表进行响应

但是存根将在某个端口上运行(我们甚至可以将其设置为静态,配置存根服务器),但我认为我们不能在443(或perhpas 80)以外的端口上调用PCF,或者我们可以吗

现在我写了所有这些,我开始意识到问题更多地与PCF有关,而不是与SCC有关,我必须说我对PCF的了解甚至比SCC还少


如果有人能帮忙,我将不胜感激。谢谢。

很好,你问了这个问题:)

我们已经用Spring云管道解决了这个问题。您可以在中阅读更多有关此的信息

简而言之,您需要打开端口并允许应用程序的多端口绑定。此外,还必须生成路由。我们已经在这里这样做了

让我把代码的主要部分复制到这里

# FUNCTION: addMultiplePortsSupport {{{
# Adds multiple ports support for Stub Runner Boot
# Uses [PAAS_TEST_SPACE_PREFIX], [ENVIRONMENT] env vars
#
# $1 - Stub Runner name
# $2 - IDs of stubs to be downloaded
# $3 - path to Stub Runner manifest
function addMultiplePortsSupport() {
    local stubRunnerName="${1}"
    local stubrunnerIds="${2}"
    local pathToManifest="${3}"
    local appName
    appName=$(retrieveAppName)
    local hostname
    hostname="$(hostname "${stubRunnerName}" "${ENVIRONMENT}" "${pathToManifest}")"
    hostname="${hostname}-${appName}"
    echo "Hostname for ${stubRunnerName} is ${hostname}"
    local testSpace="${PAAS_TEST_SPACE_PREFIX}-${appName}"
    local domain
    domain="$( getDomain "${hostname}" )"
    echo "Domain for ${stubRunnerName} is ${domain}"
    # APPLICATION_HOSTNAME and APPLICATION_DOMAIN will be used for stub registration. Stub Runner Boot
    # will use this environment variable to hardcode the hostname of the stubs
    setEnvVar "${stubRunnerName}" "APPLICATION_HOSTNAME" "${hostname}"
    setEnvVar "${stubRunnerName}" "APPLICATION_DOMAIN" "${domain}"
    local previousIfs="${IFS}"
    local listOfPorts=""
    local appGuid
    appGuid="$( "${CF_BIN}" curl "/v2/apps?q=name:${stubRunnerName}" -X GET | jq '.resources[0].metadata.guid' | sed 's/^"\(.*\)"$/\1/' )"
    echo "App GUID for ${stubRunnerName} is ${appGuid}"
    IFS="," read -ra vals <<< "${stubrunnerIds}"
    for stub in "${vals[@]}"; do
        echo "Parsing ${stub}"
        local port
        port=${stub##*:}
        if [[ "${listOfPorts}" == "" ]]; then
            listOfPorts="${port}"
        else
            listOfPorts="${listOfPorts},${port}"
        fi
    done
    echo "List of added ports: [${listOfPorts}]"
    "${CF_BIN}" curl "/v2/apps/${appGuid}" -X PUT -d "{\"ports\":[8080,${listOfPorts}]}"
    echo "Successfully updated the list of ports for [${stubRunnerName}]"
    IFS="," read -ra vals <<< "${stubrunnerIds}"
    for stub in "${vals[@]}"; do
        echo "Parsing ${stub}"
        local port
        port=${stub##*:}
        local newHostname="${hostname}-${port}"
        echo "Creating route with hostname [${newHostname}]"
        "${CF_BIN}" create-route "${testSpace}" "${domain}" --hostname "${newHostname}"
        local routeGuid
        routeGuid="$( "${CF_BIN}" curl -X GET "/v2/routes?q=host:${newHostname}" | jq '.resources[0].metadata.guid' | sed 's/^"\(.*\)"$/\1/' )"
        echo "GUID of the new route is [${routeGuid}]. Will update the mapping for port [${port}]"
        "${CF_BIN}" curl "/v2/route_mappings" -X POST -d "{ \"app_guid\": \"${appGuid}\", \"route_guid\": \"${routeGuid}\", \"app_port\": ${port} }"
        echo "Successfully updated the new route mapping for port [${port}]"
    done
    IFS="${previousIfs}"
} # }}}
#函数:添加多端口支持{{{
#添加对存根运行程序引导的多端口支持
#使用[PAAS\u测试\u空间\u前缀],[ENVIRONMENT]环境变量
#
#$1-存根运行程序名称
#$2-要下载的存根ID
#$3-存根运行程序清单的路径
函数addMultiplePortsSupport(){
本地stubRunnerName=“${1}”
本地stubrunnerIds=“${2}”
本地pathToManifest=“${3}”
本地应用程序名
appName=$(检索appName)
本地主机名
hostname=“$(主机名“${stubRunnerName}”“${ENVIRONMENT}”“${pathToManifest}”)
hostname=“${hostname}-${appName}”
echo“${stubRunnerName}的主机名为${Hostname}”
本地testSpace=“${PAAS\u TEST\u SPACE\u PREFIX}-${appName}”
本地域
domain=“$(getDomain“${hostname}”)
echo“${stubRunnerName}的域是${Domain}”
#应用程序\主机名和应用程序\域将用于存根注册。存根运行程序启动
#将使用此环境变量对存根的主机名进行硬编码
setEnvVar“${stubRunnerName}”应用程序_主机名“${HOSTNAME}”
setEnvVar“${stubRunnerName}”应用程序\域“${DOMAIN}”
本地上一个IFS=“${IFS}”
本地listOfPorts=“”
本地appGuid
appGuid=“$(“${CF_BIN}”curl”/v2/apps?q=name:${stubRunnerName}”-X GET | jq.resources[0]。metadata.guid'{sed's/^“\(.\)“$/\1/”)
echo“${stubRunnerName}的应用程序GUID为${appGuid}”

IFS=“,”read-ra vals,谢谢,我会阅读这些资源!我从来没有仔细研究过Spring管道,因为我认为目前我们没有机会使用它。虽然我对该项目有一些疑问,主要是出于好奇,但我不想在www上充斥我的问题:)有可能公开合同吗r HTTP给消费者。我们的PCF目前不支持多个端口,因此我们无法使用中央存根运行程序服务器。因此,作为一种解决方法,我想通过HTTP公开实际生产者应用程序的存根运行程序的行为。你能给我指给负责接收请求和验证合同的代码吗?谢谢。所有内容是可能的;)您可以将其作为静态源附加。您还可以在运行时解析此协定(只需下载一个原始jar,解压缩它并获取协定)。另一个选项是应用上面提供的逻辑以允许多端口绑定。