/ / Jenkins git submodule update falha - git, jenkins, bitbucket, git-submodules

Falha na atualização do submódulo do Jenkins git - git, jenkins, bitbucket, git-submodules

Eu tenho um repositório git que tem um submódulo. Ambos pertencem a uma equipe no BitBucket. Minha máquina jenkins é um servidor de janelas AWS com o plugin git. Eu estou usando chaves SSH para autenticação. Eu tenho três empregos de Jenkins. Um clona o repositório principal. Isso é bem sucedido. Um clona o segundo repo por conta própria (o repositório que será usado como submódulo). Isso também é bem sucedido. No meu terceiro trabalho de construção, digo a Jenkins para atualizar recursivamente os submódulos. Isso falha e diz erro de chave pública. Como isso pode acontecer se eu conseguir clonar o repositório sozinho?

Saída do console abaixo:

Started by user anonymous
Building on master in workspace C:Program Files (x86)JenkinsjobsMainRepoworkspace
Wiping out workspace first.
Cloning the remote Git repository
Cloning repository git@bitbucket.org:team/mainrepo.git
> git.exe init C:Program Files (x86)Jenkinsjobsmainrepoworkspace # timeout=10
Fetching upstream changes from git@bitbucket.org:team/mainrepo.git
> git.exe --version # timeout=10
using GIT_SSH to set credentials
> git.exe -c core.askpass=true fetch --tags --progress git@bitbucket.org:team/mainrepo.git +refs/heads/*:refs/remotes/origin/*
> git.exe config remote.origin.url git@bitbucket.org:team/mainrepo.git # timeout=10
> git.exe config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
> git.exe config remote.origin.url git@bitbucket.org:team/mainrepo.git # timeout=10
Fetching upstream changes from git@bitbucket.org:team/mainrepo.git
using GIT_SSH to set credentials
> git.exe -c core.askpass=true fetch --tags --progress git@bitbucket.org:team/mainrepo.git +refs/heads/*:refs/remotes/origin/*
> git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10
> git.exe rev-parse "refs/remotes/origin/origin/master^{commit}" # timeout=10
Checking out Revision 6b3f6535c45e79ee88f4918d464edead48d83369 (refs/remotes/origin/master)
> git.exe config core.sparsecheckout # timeout=10
> git.exe checkout -f 6b3f6535c45e79ee88f4918d464edead48d83369
> git.exe rev-list 6b3f6535c45e79ee88f4918d464edead48d83369 # timeout=10
> git.exe remote # timeout=10
> git.exe submodule init # timeout=10
> git.exe submodule sync # timeout=10
> git.exe config --get remote.origin.url # timeout=10
> git.exe submodule update --init --recursive
FATAL: Command "git.exe submodule update --init --recursive" returned status code 128:
stdout:
stderr: Cloning into "my-submodule"...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of "git@bitbucket.org:team/my-submodule.git" into submodule path "my-submodule" failed

hudson.plugins.git.GitException: Command "git.exe submodule update --init --recursive" returned status code 128:
stdout:
stderr: Cloning into "my-submodule"...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of "git@bitbucket.org:team/my-submodule.git" into submodule path "my-submodule" failed

at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1693)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$500(CliGitAPIImpl.java:62)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$7.execute(CliGitAPIImpl.java:953)
at hudson.plugins.git.extensions.impl.SubmoduleOption.onCheckoutCompleted(SubmoduleOption.java:90)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1098)
at hudson.scm.SCM.checkout(SCM.java:485)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1276)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:607)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
at hudson.model.Run.execute(Run.java:1738)
at hudson.matrix.MatrixBuild.run(MatrixBuild.java:301)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:410)
Finished: FAILURE

Respostas:

0 para resposta № 1

este é era um bug conhecido em Jenkins: https://issues.jenkins-ci.org/browse/JENKINS-20941 mas agora foi corrigido, atualize seu plugin Git para resolver o problema.

Se a atualização não for possível, como solução alternativa, você poderá colocar a chave na pasta .ssh do jenkins-users.


18 para resposta № 2

Com base nas respostas anteriores aqui, eure-priorizado atualizando Jenkins do meu cliente. Agora eles estão no Jenkins 2.41 com o plugin Git 3.0.1 e antes de configuração adicional isso não resolveu o problema. Eu achei a configuração um pouco complicada:

  1. Adicionar repositório de nível superior ao gerenciamento de código-fonte -> Git
  2. Selecione o botão Adicionar "Comportamentos adicionais"
    • Selecione "Comportamentos de submódulos avançados"
  3. Eu testei apenas com "Atualização recursiva de submodules" e recebi o erro "Permission denied" (veja abaixo *)
  4. No entanto, agora eu selecione "Recursively update submodules" e "Use credentials from default remote do repositório pai" no Jenkins 2.41

Depois de selecionar as duas opções, ele usa as credenciais que eu configurei para o repositório de nível superior e tudo funciona para mim. Aqui está o que a caixa de diálogo parece em 2.41 com o plugin Git 3.0.1: Configuração de autenticação de submodule git sob Jenkins 2.41

* Aqui está a essência do meu erro "Permissão negada":

Clonando em "terceiro partido" ...

stderr: Permissão negada (publickey). fatal: o terminal remoto desligou inesperadamente Clone of "ssh: //hg@bitbucket.org//thirdparty" no caminho do submódulo "thirdparty" falhou

PS Pouco antes de postar, eu fiz o meu dobro habitualverifique se eu não estou duplicando uma resposta. Neste caso, vejo que o comentário de @danielfn aponta para algo que é quase idêntico à minha resposta, mas 1. isso não me ajudou e acabei imaginando por tentativa e erro e 2. é política StackOverflow para postar respostas aqui em vez de referenciar links externos.


5 para resposta № 3

Como alternativa, você pode usar o "Gerenciamento de código-fonte" - "Vários SCMs" para configurar manualmente todos os submódulos e adicionar "Comportamentos adicionais" - "Fazer check-out para um subdiretório" para cada um deles.


5 para resposta № 4

Parece que eles foram corrigidos com as versões git plugin do cliente 1.20.0-beta1 e git plugin 2.5.0-beta1. No entanto, eles só podem ser adicionados ao Jenkins, especificando para extrair atualizações do centro de atualização experimental.