问题
I'm currently stuck trying to get Jenkins to
- clone a project and it's submodules
- use the deploy key config as per Authenticate Jenkins CI for Github private repository
Here is my output from Jenkins Console.. it's obvious the plugin is attempting to use the straight project name.. which is not setup to use the key.
Started by user '__'
Building in workspace /var/lib/jenkins/workspace/JENKINSPROJECTNAME
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.PROJECTREPO.url github-deploy-project:Owner/ProjectName # timeout=10
Fetching upstream changes from github-deploy-project:Owner/ProjectName
> git --version # timeout=10
using GIT_SSH to set credentials
> git fetch --tags --progress github-deploy-project:Owner/ProjectName +refs/heads/*:refs/remotes/ProjectName/*
> git rev-parse refs/remotes/ProjectName/master^{commit} # timeout=10
> git rev-parse refs/remotes/ProjectName/ProjectName/master^{commit} # timeout=10
Checking out Revision ______________ (refs/remotes/ProjectName/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f _____________
> git rev-list ________________ # timeout=10
> git remote # timeout=10
> git submodule init # timeout=10
> git submodule sync # timeout=10
> git config --get remote.ProjectName.url # timeout=10
> git submodule update --init --recursive
FATAL: Command "git submodule update --init --recursive" returned status code 1:
stdout:
stderr: Cloning into 'submodule/FolderName'...
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/Owner/SubModuleProject.git/'
Clone of 'https://github.com/Owner/SubModuleProject.git' into submodule path 'submodule/FolderName' failed
hudson.plugins.git.GitException: Command "git submodule update --init --recursive" returned status code 1:
stdout:
stderr: Cloning into 'submodule/FolderName'...
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/Owner/SubModuleProject.git/'
Clone of 'https://github.com/Owner/SubModuleProject.git' into submodule path 'submodule/FolderName' failed
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1407)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$400(CliGitAPIImpl.java:87)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$6.execute(CliGitAPIImpl.java:742)
at hudson.plugins.git.extensions.impl.SubmoduleOption.onCheckoutCompleted(SubmoduleOption.java:77)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:920)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1252)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:615)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:524)
at hudson.model.Run.execute(Run.java:1706)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:232)
回答1:
Git is recursively fetching the repos defined in .gitmodules at the base of the main project.
You have a couple of ways to attack this:
- Change .gitmodules to refer to a copy of the repo with required access controls.
- Fork the github repo, and change the required access controls.
- Remove the entry in .submodule and instead copy it into the main repo.
- If you control the github repo in question, configure ~jenkins/.ssh/config IdentityFile
来源:https://stackoverflow.com/questions/25535632/loading-private-repository-submodules-in-jenkins-project