将 Stub Runner 引导服务器部署到 PCF

Deploying Stub Runner Boot Server to PCF

我们正在尝试使用 Stub Runner Boot 在 Nexus(和本地存储库)上提供存根服务器和存根。

在我提交的其他问题的帮助下,我在本地或多或少地进行了整理。

但是现在,我想我会面临另一个问题,我又卡住了...我们准备将存根服务器部署到我们的 PCF 上进行冒烟测试。 我们可以愉快地说 curl pcf_host/stubs,它会以配置的存根列表和端口号作为响应。

但存根将 运行 在某些端口(我们甚至可以静态化,配置存根服务器)但我认为我们无法在除此之外的端口上调用 PCF 443(或 perhpas 80),或者我们可以吗?

写了这么多,我开始意识到这个问题更多的是PCF而不是SCC,而且我必须说我对PCF的了解甚至比SCC还少。

如果有人能提供帮助,我们将不胜感激。谢谢

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

我们已经使用 Spring Cloud Pipelines 解决了这个问题。您可以在 https://cloud.spring.io/spring-cloud-pipelines/single/spring-cloud-pipelines.html#_3_8_enable_stubs_for_smoke_tests 中阅读更多相关信息。

简而言之,您需要为您的应用开放端口并允许绑定多个端口。您还必须生成路线。我们已经在这里做到了 https://github.com/spring-cloud/spring-cloud-pipelines/blob/master/common/src/main/bash/pipeline-cf.sh#L577

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

# FUNCTION: addMultiplePortsSupport {{{
# Adds multiple ports support for Stub Runner Boot
# Uses [PAAS_TEST_SPACE_PREFIX], [ENVIRONMENT] env vars
#
#  - Stub Runner name
#  - IDs of stubs to be downloaded
#  - path to Stub Runner manifest
function addMultiplePortsSupport() {
    local stubRunnerName=""
    local stubrunnerIds=""
    local pathToManifest=""
    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/^"\(.*\)"$//' )"
    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/^"\(.*\)"$//' )"
        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}"
} # }}}