Como faço para mudar o plugin Jenkins Git de usar GIT_ASKPASS para .gitcredentials

1

Já publiquei esta questão:

O Jenkins não pode ler a senha do Github desde a atualização para o plugin do Git 2.1.0

Resumidamente, eu clonei minha instância de produção do Jenkins 1.650 e atualizei a instância clonada para 2.25 no Windows 2012.

Como parte disso, o plugin Git Client foi atualizado de 1.19.6 para 2.1.0 e agora ele não pode autenticar.

Eu tenho trabalhos que funcionam perfeitamente se eu fizer downgrade desse plug-in novamente, mas quando executados usando o plug-in atualizado, os trabalhos falharão.

Agora percebi que a única diferença que posso ver é que na saída da tarefa, na instância em que ela funciona, há uma mensagem using .gitcredentials to set credentials e na instância clonada using GIT_ASKPASS to set credentials .

Eu suspeito que esse seja o problema ou pelo menos relacionado, mas não consigo encontrar uma maneira de mudar isso. Saída completa de trabalhos com falha abaixo:

08:18:40 Cloning the remote Git repository
08:18:40 Cloning repository https://github.com/mycompany/myrepo.git
08:18:40  > C:\Program Files\Git\cmd\git.exe init C:\Program Files (x86)\Jenkins\workspace\project # timeout=10
08:18:40 Fetching upstream changes from https://github.com/mycompany/myrepo.git
08:18:40  > C:\Program Files\Git\cmd\git.exe --version # timeout=10
08:18:40 using GIT_ASKPASS to set credentials 
08:18:40  > C:\Program Files\Git\cmd\git.exe fetch --tags --progress https://github.com/mycompany/myrepo.git +refs/heads/*:refs/remotes/origin/*
08:18:41 ERROR: Error cloning remote repo 'origin'
08:18:41 hudson.plugins.git.GitException: Command "C:\Program Files\Git\cmd\git.exe fetch --tags --progress https://github.com/mycompany/myrepo.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
08:18:41 stdout: 
08:18:41 stderr: '*dds23' is not recognized as an internal or external command,
08:18:41 operable program or batch file.
08:18:41 error: unable to read askpass response from 'C:\Windows\TEMP\pass6274847349411211542.bat'
08:18:41 bash: /dev/tty: No such device or address
08:18:41 error: failed to execute prompt script (exit code 1)
08:18:41 fatal: could not read Password for 'https://[email protected]': No error
08:18:41 
08:18:41    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1745)
08:18:41    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1489)
08:18:41    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:64)
08:18:41    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:315)
08:18:41    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:512)
08:18:41    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1054)
08:18:41    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1094)
08:18:41    at hudson.scm.SCM.checkout(SCM.java:495)
08:18:41    at hudson.model.AbstractProject.checkout(AbstractProject.java:1278)
08:18:41    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:604)
08:18:41    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
08:18:41    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
08:18:41    at hudson.model.Run.execute(Run.java:1720)
08:18:41    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:531)
08:18:41    at hudson.model.ResourceController.execute(ResourceController.java:98)
08:18:41    at hudson.model.Executor.run(Executor.java:401)
08:18:41 ERROR: null
08:18:41 Archiving artifacts
08:18:41 [htmlpublisher] Archiving HTML reports...
08:18:41 [htmlpublisher] Archiving at PROJECT level C:\Program Files (x86)\Jenkins\workspace\project\server.project\server.distribution\target\htmldocs\documentation to C:\Program Files (x86)\Jenkins\jobs\project\htmlreports\documentation
08:18:41 ERROR: Specified HTML directory 'C:\Program Files (x86)\Jenkins\workspace\project\server.project\server.distribution\target\htmldocs\documentation' does not exist.
08:18:41 [BFA] Scanning build for known causes...
08:18:41 [BFA] No failure causes found
08:18:41 [BFA] Done. 0s
08:18:41 Started calculate disk usage of build
08:18:41 Finished Calculation of disk usage of build in 0 seconds
08:18:41 Started calculate disk usage of workspace
08:18:41 Finished Calculation of disk usage of workspace in 0 seconds
08:18:42 Sending e-mails to: bob@yeah
08:18:43 Finished: FAILURE

EDITAR

De acordo com as sugestões do bobs, executei esses comandos com sucesso.

del c:\users\user-name\.gitconfig
git config --global credential.helper manager
git fetch --tags --progress https://stash/myproj/proj.git +refs/heads/*:refs/remotes/origin/*

No entanto, a saída ao executar meu trabalho era exatamente a mesma. Ainda usando o GIT_ASKPASS. Deve haver uma maneira de reverter para .gitcredentials.

    
por shaneoh 29.12.2016 / 09:28

4 respostas

1

Você não pode alterar o plug-in do cliente gits Jenkins usando o ASKPASS para usar .gitcredentials. O plugin não possui métodos de solicitação de senha selecionáveis.

Ele usou .gitcredentials em lançamentos anteriores a 2.0 e mudou para ASKPASS nas versões 2.0 e posteriores. Essa alteração foi feita para que a autenticação do submódulo pudesse ser adicionada no git client plugin 2.0.

Existem relatórios de bugs abertos que descrevem alguns cenários em que configurações de nome de usuário / senha baseadas no Windows não funcionam mais com acesso baseado em https a um repositório git. Alguns desses cenários incluem:

  • A senha contém um caractere que requer o escape do Windows, mas o plug-in não escapa da senha corretamente ( JENKINS-40166 , JENKINS-38194 e JENKINS-38179)
  • Modo de falha desconhecido com o TFS 2105 JENKINS-38138

Algumas alternativas temporárias anteriores às correções para esses bugs abertos incluem:

  • Fique com suas versões atuais (git plugin do cliente 1.19.6 e git plugin 2.x)
  • Faça o download e instale o plugin do git client 1.21.0 e git plugin 2.6.1 para que você possa ficar com o plugin do git client antes da mudança de credenciais. Você precisa fazer o download do URL updates.jenkins-ci.org/download/plugins/git e updates.jenkins-ca.org/download/plugins/git-client e, em seguida, use a guia "Avançado" do gerenciador de plug-ins do Jenkins para fazer o upload as versões mais recentes (mas não as mais recentes) do plugin do git client e do git plugin
  • Ajudar com a avaliação da solicitação de solicitação de plug-in do cliente git pendente, que ajusta o escape de senha do Windows no plug-in. O pedido pull é PR231 no github
por 06.01.2017 / 10:59
0

Acho que as credenciais ficaram confusas com uma das atualizações do plug-in, então, basicamente, limpei todas as configurações anteriores e as redefinii. Isto é o que eu fiz, comando por comando:

del c:\users\user-name\.gitconfig
git config --global credential.helper manager
git fetch --tags --progress https://stash/myproj/proj.git +refs/heads/*:refs/remotes/origin/*

enter ID/PW on pop up dialog

Concluído. Agora, quando executo qualquer comando git (inclusive no jenkins, que é criado com esse ID), ele não solicita mais a senha, como aconteceu antes de eu atualizar o (s) plug-in (s).

    
por 05.01.2017 / 13:19
0

A mesma coisa aconteceu comigo depois do plugin do Git 2.1.0 - > 2.2.0 e o plugin Git 2.5.2 - > 3.0.1 . Depois de reverter esses problemas, eu apaguei todas as entradas [credenciais] desse arquivo: c:\users\user\.gitconfig (ou seja, as globais: git config --global --list ) e, em seguida, redefinir (adicionado?) Isso

git config --global credential.helper manager

e, em seguida, fez uma amostra git fetch, que agora aparece janela para inserir o ID / PW, que armazena em cache com o gerente. Chamadas subseqüentes funcionam.

    
por 04.01.2017 / 19:33
0

Isso é o que funcionou para mim.

Parece que, quando você tenta se conectar ao repositório, ele não recebe as credenciais fornecidas, em vez disso, ele recebe os Windowscredentials armazenados para o URL do repositório fornecido.

Então, a maneira que eu segui para fazer este trabalho é:

  1. Faça login no servidor slave usando o mesmo usuário com o nó do jenkins para executar (no meu caso, aquele que executa o serviço)

  2. Use git client para criar um repositório de git onde você quiser e criar um clone git. Lá você será solicitado para credenciais. Coloque as credenciais corretas e assegure-se de obter os arquivos no repositório para o local escolhido.

  3. Verifique as credenciais onde armazenadas via Painel de Controle \ Contas de Usuário \ Gerenciador de Credenciais - > Credencial do Windows. (Em genérico deve estar relacionado ao seu URL)

  4. Configure a tarefa para baixar do GIT. Coloque o URL e não deve haver nenhuma mensagem de alerta em vermelho. Eu testei que este trabalho sem fornecer credenciais em Jenkins.

  5. você está pronto!

por 29.06.2017 / 10:12