Развертывание загрузочного сервера Stub Runner на PCF

Мы пытаемся использовать Stub Runner Boot, чтобы иметь сервер-заглушку и заглушки, доступные на Nexus (и локальном репо).

Локально я более-менее разобрался, с помощью других вопросов, которые я задал.

Но теперь я думаю, что столкнусь с другой проблемой, и я снова застрял... Мы собираемся развернуть сервер-заглушку на нашем PCF для дымового тестирования. Мы можем с радостью сказать curl pcf_host/stubs, и он ответит списком настроенных заглушек и номеров портов.

Но заглушки будут работать на каком-то порту (который мы можем сделать даже статическим, настроив сервер-заглушку), но я не думаю, что мы сможем вызывать PCF на порт, отличный от 443 (или, может быть, 80), или можем мы?

Теперь, когда я все это написал, я начинаю понимать, что проблема больше связана с PCF, чем с SCC, и я должен сказать, что мои знания о PCF даже меньше, чем о SCC.

Был бы признателен, если бы кто-то мог помочь. Спасибо.


person Jorge Viana    schedule 30.07.2018    source источник


Ответы (1)


Очень хорошо, что вы задали этот вопрос :)

Мы уже решаем эту проблему с помощью 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
#
# $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}"
} # }}}
person Marcin Grzejszczak    schedule 30.07.2018
comment
Спасибо, буду читать эти ресурсы! Никогда особо не интересовался Spring Pipelines, потому что не думаю, что в данный момент у нас будет возможность его использовать. Хотя у меня в рукаве есть некоторые вопросы по этому проекту, в основном из любопытства, но не хочу переполнять www своими вопросами :) - person Jorge Viana; 30.07.2018
comment
Можно ли предоставлять контракты потребителю через HTTP. Наш PCF в настоящее время не поддерживает несколько портов, поэтому мы не можем использовать центральный сервер Stub Runner. Следовательно, в качестве обходного пути я хотел бы показать поведение Stub runner с фактическим приложением Producer через HTTP. Можете ли вы указать мне код, который отвечает за получение запроса и проверку контракта. Спасибо. - person Sarvesh Dubey; 12.06.2019
comment
Все возможно ;) вы могли бы прикрепить его как статические источники. Вы также можете разрешить эти контракты во время выполнения (просто загрузите необработанный jar-файл, разархивируйте его и возьмите контракты). Другой вариант — применить логику, представленную выше, чтобы разрешить привязку к нескольким портам. - person Marcin Grzejszczak; 12.06.2019