Jenkins e HTTPS: não é possível conectar ao servidor

2

Temos um repositório Subversion localizado em uma conexão https . Eu consigo conectar-me a ele localmente (sem necessidade de proxy):

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

Agora, faço login no nosso servidor de compilação que requer um proxy:

$ ssh [email protected]
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"

Como você pode ver, tenho JENKINS_JAVA_OPTOPNS definido para meu proxy e tenho https_proxy definido. O proxy não requer um login, embora nosso repo do Subversion faça:

Vamos tentar o 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]
$

Ok, posso acessar wget para me conectar ao meu repositório. Isso significa que eu tenho conectividade de rede para o nosso repositório do nosso servidor de compilação. Infelizmente, meu sistema não possui um cliente de linha de comando do Subversion para testes. Vou ter que pedir ao nosso departamento de TI para instalar o RPM, mas agora não posso testar isso. Felizmente, o Jenkins não requer o cliente de linha de comando, pois usa o svnkit . : Eu crio um job Jenkins Freestyle, seleciono Subversion como meu repositório, e no campo URL do repositório , colocarei https://svn.corpwad.com/repos/potzrebie/branches/build-test . Eu configurei uma credencial gloabal com o usuário qazwart e senha swordfish . No entanto, enquanto ainda estamos na tela de configuração de compilação, recebo isso:

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)

Tenho a sensação de que estou perdendo mais um passo, mas não consigo entender.

    
por David W. 14.08.2014 / 17:14

2 respostas

2

Encontrou o problema. Embora eu esteja configurando JENKINS_JAVA_OPTIONS , ele não estava sendo definido quando o próprio Tomcat estava iniciando. Eu entrei em $CATALINA_BASE/bin/setenv.sh e adicionei:

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

Isso define as propriedades requer quando o Java é iniciado.

    
por 14.08.2014 / 18:03
0

Eu encontrei um meio alternativo de obter esses valores em Java que funcionou para mim em um contexto do Windows.

Em C:\Program Files (x86)\Jenkins\jenkins.xml

Eu editei a linha que alimentava o java de

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

para

<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>

A inserção da chave é -Dhttp.proxyHost = proxy.myproxy.com Dhttp.proxyPort = 99999 -Dhttp.auth.preference = Basic

OarquivoJenkins.xmlemsilevou-meapesquisarondeessearquivoexecutáveljre\bin\javapoderiaestar,paraqueeupudesseanalisá-loparaobterumamelhorcompreensãodopapeldeseusargumentosdelinhadecomando.ComodescobriemC:\ProgramFiles(x86)\Java\jre6\bin>java,osargumentosquetinhamoformato-D<name>=<value>eramafamíliadeargumentosqueeuprecisavadefinirparaobterasconfiguraçõesdeproxycorretamentecomunicadasaoJava.

EuestavacommuitadificuldadetentandofazercomqueminhaconfiguraçãodoSVNfuncionasseatrásdoservidorproxy,eeramuitoconfuso,poisopróprioJenkinspodiaseconectaraoproxycomoinformadopelasconfiguraçõesdeproxyqueeutinhahabilitadoparaelequepassaramnoteste.Nãoémuitointuitivoqueoutrasconfiguraçõessejamnecessáriasalémdissoparaestabelecerconfiguraçõesdeproxy.

Apenas para ajudar os outros a se depararem com esse problema, os erros que eu encontrei originalmente vieram como:

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'
    
por 19.03.2016 / 01:50