Я пытаюсь загрузить содержимое защищенного паролем URL Gerrit в конвейерном скрипте Jenkins Groovy. HTTPBuilder недоступен, поэтому я использую класс URL с Authenticator:
// To avoid pipline bailing out since data PasswordAuthentication is non-serializable
@NonCPS
def getToString(data) {
data.toString()
}
def fetchCommit(host, project, version) {
withCredentials([usernamePassword(credentialsId: 'my-credentials',
usernameVariable: 'user',
passwordVariable: 'PASSWORD')]) {
proj = java.net.URLEncoder.encode(project, 'UTF-8')
echo "Setting default authentication"
Authenticator.default = {
new PasswordAuthentication(env.user, env.PASSWORD as char[])
} as Authenticator
echo "https://${host}/a/projects/${proj}/commits/${version}"
url = "https://${host}/a/projects/${proj}/commits/${version}".toURL()
result = getToString(url.getText())
echo "${result}"
}
}
Результатом является экземпляр PasswordAuthentication, а не ожидаемые данные:
[Pipeline] echo
java.net.PasswordAuthentication@3938b0f1
Я боролся сэто на время. Я пробовал разные способы настройки аутентификации и чтения данных, но в большинстве случаев это исключение. Использование eachLine () в URL не приводит к закрытию вообще. Работа также быстро завершается, создается впечатление, что она даже не пытается установить соединение.
Refs: