Jenkins (Windows Service) com o Git sobre SSH

2

Estou tendo dificuldade em configurar o Jenkins, funcionando como um Serviço do Windows, para conectar-me a um servidor git (gitosis) e clonar um repositório. Jenkins está definido para usar o plug-in Git padrão.

Tudo é hospedado por nós: o servidor Jenkins está no win.foo.com e o gitosis está sendo executado em um servidor linux ( git.foo.com ).

Se eu RDP em win.foo.com eu posso clonar ( git.exe clone --progress -o origin [email protected]:myproject.git myproject ) a partir da linha de comando sem problemas.

O Jenkins está sendo executado como um serviço e, como não está sendo executado na mesma conta de usuário, copiei a pasta .ssh para %SystemRoot%\System32\config\systemprofile (conforme definido na variável de ambiente %USERPROFILE% ) e C:\Program Files (x86)\Git\ , mas nenhuma delas destes parecem ser apanhados por Jenkins, mesmo depois de um reinício completo.

Eu tentei usar os dois git.exe e git.cmd ; sem alegria em ambos os casos.

Jenkins está falhando com a seguinte mensagem de erro:

ERROR: Error cloning remote repo 'origin' : Could not clone [email protected]:myproject.git
ERROR: Cause: Error performing command: C:\Program Files (x86)\Git\cmd\git.cmd clone --progress -o origin [email protected]:myproject.git C:\Program Files (x86)\Jenkins\jobs\myproject\workspace
Command "C:\Program Files (x86)\Git\cmd\git.cmd clone --progress -o origin [email protected]:myproject.git C:\Program Files (x86)\Jenkins\jobs\myproject\workspace" returned status code 128: Cloning into C:\Program Files (x86)\Jenkins\jobs\myproject\workspace...
Access denied
fatal: The remote end hung up unexpectedly

Tenho certeza de que perdi alguma coisa, mas não sei o que.

Conselhos?

    
por Phillip B Oldham 02.08.2011 / 18:16

2 respostas

4

Eu tenho lido o seguinte artigo, que está intimamente relacionado: e deu uma boa dica: Não trabalhe como eu pensava.

Depois de muita pesquisa e tentativa, encontrei este artigo: link

Na verdade, não é suficiente definir a variável de ambiente no Windows como de costume, ao executar o ssh a partir de uma conta de serviço, mas alterar a configuração para que as chaves sejam realmente encontradas.

Esboço relevante curto:

Navegue até C: \ Arquivos de programas \ Git \ etc \ profile e adicione a seguinte linha

HOME="/c/Users/YourUserAccount"

antes

# normalize HOME to unix path
HOME="$(cd "$HOME" ; pwd)"

Isso resolveu para mim, porque agora Git sempre usa seu caminho atribuído estaticamente para casa. Apenas certifique-se de não ter nenhum problema de segurança com essa abordagem com outros usuários nesta máquina.

    
por 27.10.2012 / 09:27
1

O único parâmetro que você precisa verificar é o valor da variável de ambiente %HOME% , quando o Jenkins tenta clonar.
Você precisa exibir o 'conjunto' (variável de ambientes) da sessão do Jenkins e ver se HOME foi definido e, se tiver, para qual caminho.

Lembrete:

  • O Windows, por padrão, não define HOME
  • padrões do msysgit HOME to %USERPROFILE%

Para exibir as variáveis, use o recurso de criação parametrizado :

Reference parameter by name in builder. I'm using the "env" command to show the variable, followed by an echo statement to demonstrate referencing the value:

    
por 02.08.2011 / 19:27