У нас есть репозиторий 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'