Назад | Перейти на главную страницу

Jenkins и HTTPS: невозможно подключиться к серверу

У нас есть репозиторий Subversion, расположенный на https подключение. Я могу подключиться к нему локально (прокси не нужен):

$ svn ls --username=qazwart --password=swordfish \
    https://svn.corpwad.com/repos/potzrebie/branches/build-test
build.xml
src
...

Теперь я вхожу на наш сервер сборки, для которого требуется прокси:

$ ssh tomcat@jenkins.corpwad.net
Last login: Thu Aug 14 09:22:48 2014 from qazwart.corpwad.net
$ export | egrep "JENKINS|_proxy"
declare -x JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhttps.proxyHost=proxy.corpwad.net -Dhttp.proxyHost=proxy.corpwad.net -Dhttp.proxyPort=3128 -Dhttps.proxyPort=3128 -Dhttp.auth.preference=Basic"
declare -x http_proxy="http://proxy.corpwad.net:3128"
declare -x https_proxy="http://proxy.corpwad.net:3128"

Как видите, у меня JENKINS_JAVA_OPTOPNS установлен для моего прокси, и у меня есть https_proxy устанавливать. Прокси-сервер не требует входа в систему, хотя наш репозиторий Subversion требует:

Давай попробуем wget:

$ wget -O - --user=qazwart --password=swordfish https://svn.corpwad.com/repos/potzrebie/branches/build-test
--2014-08-14 09:54:09--  https://svn.corpwad.com/repos/potzrebie/branches/build-test
Resolving proxy.ilcb.tcprod.local... 10.80.12.90
Connecting to proxy.corpwad.net|10.80.12.90|:3128... connected.
Proxy request sent, awaiting response... 401 Authorization Required
Connecting to proxy.corpwad.net|10.80.12.90|:3128... connected.
Proxy request sent, awaiting response... 301 Moved Permanently
Location: https://svn.corpwad.com/repos/potzrebie/branches/build-test [following]
--2014-08-14 09:54:10--  https://svn.corpwad.com/repos/potzrebie/branches/build-test
Connecting to proxy.ilcb.tcprod.local|10.80.12.90|:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 1130 (1.1K) [text/html]
Saving to: “STDOUT”

 0% [                                                                               ] 0            --.-K/s              <html><head><title> potzrebie - Revision 1937: /branches/build-test</title></head>
<body>
 <h2> potzrebie - Revision 1937: /branches/build-test</h2>
 <ul>
  <li><a href="../">..</a></li>
  <li><a href="build.xml">build.xml</a></li>
  ...
 </ul>
100%[==============================================================================>] 1,130       --.-K/s   in 0s      

2014-08-14 09:54:10 (51.6 MB/s) - written to stdout [1130/1130]
$

Хорошо, я могу пройти wget для подключения к моему репозиторию. Это означает, что у меня есть сетевое подключение к нашему репозиторию с нашего сервера сборки. К сожалению, в моей системе нет клиента командной строки Subversion для тестирования. Мне придется попросить наш ИТ-отдел установить для него RPM, но сейчас я не могу это проверить. К счастью, Jenkins не требует клиента командной строки, поскольку он использует svnkit. : Я создаю работу Jenkins Freestyle, выберите Subversion как мой репозиторий, и в URL-адрес репозитория поле, я положу https://svn.corpwad.com/repos/potzrebie/branches/build-test. Я установил глобальный учетные данные с пользователем qazwart и пароль swordfish. Однако, находясь на экране конфигурации сборки, я получаю следующее:

Unable to access https://svn.corpwar.com/repos/potzrebie/branches/build-test : svn: E175002: OPTIONS /repos/potzrebie/branches/build-test failed 
org.tmatesoft.svn.core.SVNException: svn: E175002: OPTIONS /repos/potzrebie/branches/build-test failed
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:388)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:373)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:361)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:707)
....
Caused by: svn: E175002: OPTIONS /repos/potzrebie/branches/build-test failed
        at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:208)
        at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:154)
        at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:97)
        ... 88 more
Caused by: org.tmatesoft.svn.core.SVNException: svn: E175002: OPTIONS request failed on '/repos/potzrebie/branches/build-test'
svn: E175002: connection refused by the server
        at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)
        at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)
        at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection._request(HTTPConnection.java:777)
        at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:382)
        ... 87 more
Caused by: svn: E175002: OPTIONS request failed on '/repos/potzrebie/branches/build-test'
        at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:208)
        at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection._request(HTTPConnection.java:775)
        ... 88 more
Caused by: svn: E175002: connection refused by the server
        at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:208)
        at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection._request(HTTPConnection.java:520)
        ... 88 more
Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)

У меня такое чувство, что я упускаю еще один незначительный шаг, но не могу понять.

Нашел проблему. Хотя я устанавливаю JENKINS_JAVA_OPTIONS, он не устанавливался при запуске самого Tomcat. Я вошел в $CATALINA_BASE/bin/setenv.sh и добавил:

CATALINA_OPTS="$CATALINA_OPTS $JENKINS_JAVA_OPTIONS -DJENKINS_HOME=...

Это устанавливает требуемые свойства при запуске Java.

Я нашел альтернативный способ передачи этих значений в Java, который работал у меня в контексте Windows.

Под C:\Program Files (x86)\Jenkins\jenkins.xml

Я отредактировал строку, которая вводилась в java из

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

к

<arguments>-Xrs -Xmx256m -Djava.awt.headless=true -Dhttp.proxyHost=proxy.myproxy.com Dhttp.proxyPort=99999 -Dhttp.auth.preference=Basic -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

Ключ вставка -Dhttp.proxyHost = proxy.myproxy.com Dhttp.proxyPort = 99999 -Dhttp.auth.preference = Базовый

Сам файл Jenkins.xml заставил меня поискать, где это jre\bin\java исполняемый файл может быть таким, чтобы я мог исследовать его, чтобы лучше понять роль его аргументов командной строки. Как я узнал под C:\Program Files (x86)\Java\jre6\bin>java аргументы, имеющие форму -D<name>=<value> было набором аргументов, которые мне нужно было задать, чтобы настройки прокси-сервера должным образом передавались Java.

Я изо всех сил пытался заставить мою настройку SVN работать за прокси-сервером, и это очень сбивало с толку, поскольку сам Jenkins мог подключаться к прокси, как указано в настройках прокси, которые я включил для него, которые прошли тест. Совершенно не интуитивно понятно, что для установки прокси-сервера потребуются дополнительные настройки.

Просто чтобы помочь другим, кто столкнется с этой проблемой, я обнаружил следующие ошибки:

Checking out a fresh workspace because there's no workspace at C:\SVNXXX\JenkinsWorkspace
Cleaning local Directory .
Checking out http://xxxxxxxxxx/trunk at revision '2016-03-18T16:12:17.711 -0700'
ERROR: Failed to check out http://xxxxxxxxxxxx/trunk
org.tmatesoft.svn.core.SVNException: svn: E175002: connection refused by the server
svn: E175002: OPTIONS request failed on 'xxxxxxxxx/trunk'