Reputation: 101
I'm trying to clone git repository via ssh from Java (that runs in Docker), but cloning fails. If I try to run with docker exec inside container it works pretty fine. So I don't understand why git clone not works. I've tried to put breakpoint before the command start by process builder and check that all files are exists. P.S. I need to pass ssh key only once when git clone exec, I don't need to store it for a long time, because this app can clone from different vcs with different ssh keys.
Java output:
backend-server-1 | 2022-06-29 08:17:53,186 INFO c.s.i.g.s.RepoInfo [pool-4-thread-1] Directory for files from repository and extra created.
backend-server-1 | Path to files = /opt/backend/files/b/145/.src
backend-server-1 | Path to extra = /usr/local/tomcat/temp/git5370745586107281269/repo {}
backend-server-1 | 2022-06-29 08:17:53,191 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] Trying to get sources from git repository via branch with '.git' suffix {}
backend-server-1 | 2022-06-29 08:17:53,194 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] Trying to clone via link: '[email protected]:BrezhnevSA/launch_in_netns.git' {}
backend-server-1 | 2022-06-29 08:17:53,216 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] tempFile.getAbsolutePath() {}
backend-server-1 | 2022-06-29 08:17:53,217 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] /usr/local/tomcat/temp/ssh_key_17036759532395112843.pub {}
backend-server-1 | 2022-06-29 08:17:53,229 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; /usr/bin/git clone --recurse-submodules --separate-git-dir="/usr/local/tomcat/temp/git5370745586107281269/repo" [email protected]:BrezhnevSA/launch_in_netns.git /opt/backend/files/b/145/.src' {}
backend-server-1 | 2022-06-29 08:17:53,231 INFO c.s.i.u.c.CmdRunner [pool-4-thread-1] Starting ssh-agent... {}
backend-server-1 | 2022-06-29 08:17:53,250 ERROR c.s.i.g.s.Analysis [pool-4-thread-1] Failed to save task to FS {}
backend-server-1 | java.lang.RuntimeException: Couldn't execute git command 'Cmd [ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; /usr/bin/git clone --recurse-submodules --separate-git-dir="/usr/local/tomcat/temp/git5370745586107281269/repo" [email protected]:BrezhnevSA/launch_in_netns.git /opt/backend/files/b/145/.src']'
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.getProcessResult(GitCommandRunner.java:398) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.clone(GitCommandRunner.java:338) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.cloneRepositoryViaBranch(GitCommandRunner.java:188) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.cloneRepositoryViaBranch(GitCommandRunner.java:138) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.cloneRepositoryViaBranch(GitCommandRunner.java:89) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.start.RepoInfo.saveToFs(RepoInfo.java:57) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.start.RepoSource.saveToFs(RepoSource.java:40) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.start.Analysis.prepareSources(Analysis.java:102) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.start.Analysis.run(Analysis.java:84) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.utils.PreservingStackExecutorService.lambda$runnableWithStack$2(PreservingStackExecutorService.java:123) ~[utils-3.12.0-SNAPSHOT.jar:?]
backend-server-1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
backend-server-1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
backend-server-1 | at java.lang.Thread.run(Thread.java:834) ~[?:?]
backend-server-1 | Caused by: java.io.IOException: Cannot run program "ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ": error=2, No such file or directory
backend-server-1 | at java.lang.ProcessBuilder.start(ProcessBuilder.java:1128) ~[?:?]
backend-server-1 | at java.lang.ProcessBuilder.start(ProcessBuilder.java:1071) ~[?:?]
backend-server-1 | at com.smartdec.incode.utils.cmd.CmdRunner.start(CmdRunner.java:244) ~[utils-3.12.0-SNAPSHOT.jar:?]
backend-server-1 | at com.smartdec.incode.utils.cmd.CmdRunner.runWithTimeout(CmdRunner.java:96) ~[utils-3.12.0-SNAPSHOT.jar:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.getProcessResult(GitCommandRunner.java:375) ~[classes/:?]
backend-server-1 | ... 12 more
backend-server-1 | Caused by: java.io.IOException: error=2, No such file or directory
backend-server-1 | at java.lang.ProcessImpl.forkAndExec(Native Method) ~[?:?]
backend-server-1 | at java.lang.ProcessImpl.<init>(ProcessImpl.java:340) ~[?:?]
backend-server-1 | at java.lang.ProcessImpl.start(ProcessImpl.java:271) ~[?:?]
backend-server-1 | at java.lang.ProcessBuilder.start(ProcessBuilder.java:1107) ~[?:?]
backend-server-1 | at java.lang.ProcessBuilder.start(ProcessBuilder.java:1071) ~[?:?]
backend-server-1 | at com.smartdec.incode.utils.cmd.CmdRunner.start(CmdRunner.java:244) ~[utils-3.12.0-SNAPSHOT.jar:?]
backend-server-1 | at com.smartdec.incode.utils.cmd.CmdRunner.runWithTimeout(CmdRunner.java:96) ~[utils-3.12.0-SNAPSHOT.jar:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.getProcessResult(GitCommandRunner.java:375) ~[classes/:?]
backend-server-1 | ... 12 more
Java git builder:
if (isSsh(link) && filePath != null) {
stub.add("ssh-agent bash -c 'chmod 600 \""
+ filePath + "\"; ssh-add \"" + filePath + "\"; ");
}
stub.add(getGitPath());
stub.add("clone");
stub.add("--recurse-submodules");
if (StringUtils.isNotBlank(branch)) {
stub.add("--single-branch");
stub.add("--branch");
stub.add(branch);
}
stub.add("--separate-git-dir=\"" + gitDir.toString() + "\"");
if (depth > 0) {
stub.add("--depth");
stub.add(Integer.toString(depth));
}
stub.add(addOrRemoveSuffix(link, withGitSuffix));
stub.add(out.toString() + (isSsh(link) && filePath != null ? "'" : ""));
How I run with docker exec:
docker exec backend-server-1 bash -c "ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; /usr/bin/git clone --recurse-submodules --separate-git-dir="/usr/local/tomcat/temp/git5370745586107281269/repo" [email protected]:BrezhnevSA/launch_in_netns.git /opt/backend/files/b/145/.src'"
UPD:
I've changed git builder. Previous error solved, but still command not runs properly
Java git builder:
if (isSsh(link) && filePath != null) {
stub.add("ssh-agent");
stub.add("bash");
stub.add("-c");
stub.add("'chmod 600 \""
+ filePath + "\"; ssh-add \"" + filePath + "\"; "
+ getGitPath() + " clone --recurse-submodules "
+ (StringUtils.isNotBlank(branch)
? "--single-branch --branch " + branch + " "
: " "
)
+ "--separate-git-dir=\"" + gitDir.toString() + "\" "
+ (depth > 0 ? "--depth" + depth + " " : " ")
+ addOrRemoveSuffix(link, withGitSuffix) + " "
+ out.toString() + "'"
);
} else {
stub.add(getGitPath());
stub.add("clone");
stub.add("--recurse-submodules");
if (StringUtils.isNotBlank(branch)) {
stub.add("--single-branch");
stub.add("--branch");
stub.add(branch);
}
stub.add("--separate-git-dir=" + gitDir.toString());
if (depth > 0) {
stub.add("--depth");
stub.add(Integer.toString(depth));
}
stub.add(addOrRemoveSuffix(link, withGitSuffix));
stub.add(out.toString());
}
Java output:
backend-server-1 | 2022-06-29 09:20:54,856 INFO c.s.i.g.s.RepoInfo [pool-4-thread-1] Directory for files from repository and extra created.
backend-server-1 | Path to files = /opt/backend/files/b/151/.src
backend-server-1 | Path to extra = /usr/local/tomcat/temp/git890193757531557497/repo {}
backend-server-1 | 2022-06-29 09:20:54,858 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] Trying to get sources from git repository via branch with '.git' suffix {}
backend-server-1 | 2022-06-29 09:20:54,863 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] Trying to clone via link: '[email protected]:BrezhnevSA/launch_in_netns.git' {}
backend-server-1 | 2022-06-29 09:20:54,866 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] tempFile.getAbsolutePath() {}
backend-server-1 | 2022-06-29 09:20:54,867 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] /usr/local/tomcat/temp/ssh_key_6005337260985981392.pub {}
backend-server-1 | 2022-06-29 09:20:54,898 INFO c.s.i.g.u.v.GitCommandRunner [pool-4-thread-1] ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_6005337260985981392.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_6005337260985981392.pub"; /usr/bin/git clone --recurse-submodules --separate-git-dir="/usr/local/tomcat/temp/git890193757531557497/repo" [email protected]:BrezhnevSA/launch_in_netns.git /opt/backend/files/b/151/.src' {}
backend-server-1 | 2022-06-29 09:20:54,899 INFO c.s.i.u.c.CmdRunner [pool-4-thread-1] Starting ssh-agent... {}
backend-server-1 | 2022-06-29 09:20:54,936 INFO c.s.i.u.c.CmdRunner [pool-4-thread-1] Waiting for result of process 'ssh-agent' for 'ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_6005337260985981392.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_6005337260985981392.pub"; /usr/bin/git clone --recurse-submodules --separate-git-dir="/usr/local/tomcat/temp/git890193757531557497/repo" [email protected]:BrezhnevSA/launch_in_netns.git /opt/backend/files/b/151/.src'' {}
backend-server-1 | 2022-06-29 09:20:54,936 INFO c.s.i.u.c.CmdRunner [pool-4-thread-1] Process for 'ssh-agent' executed unsuccessfully, standard output: '', error output: '' {}
backend-server-1 | 2022-06-29 09:20:54,960 ERROR c.s.i.g.s.Analysis [pool-4-thread-1] Failed to save task to FS {}
backend-server-1 | java.lang.RuntimeException: Couldn't parse git error output. Result: 'CmdResult{type=ERROR, output='', error=''}'
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.getProcessResult(GitCommandRunner.java:393) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.clone(GitCommandRunner.java:337) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.cloneRepositoryViaBranch(GitCommandRunner.java:188) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.cloneRepositoryViaBranch(GitCommandRunner.java:138) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.utils.vcs.GitCommandRunner.cloneRepositoryViaBranch(GitCommandRunner.java:89) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.start.RepoInfo.saveToFs(RepoInfo.java:57) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.start.RepoSource.saveToFs(RepoSource.java:40) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.start.Analysis.prepareSources(Analysis.java:102) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.gui.start.Analysis.run(Analysis.java:84) ~[classes/:?]
backend-server-1 | at com.smartdec.incode.utils.PreservingStackExecutorService.lambda$runnableWithStack$2(PreservingStackExecutorService.java:123) ~[utils-3.12.0-SNAPSHOT.jar:?]
backend-server-1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
backend-server-1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
backend-server-1 | at java.lang.Thread.run(Thread.java:834) ~[?:?]
Upvotes: 0
Views: 173
Reputation: 8163
I don't know git builder and so can't provide the solution, but what I can is tell you what the problem is. I hope this gets you halfway to solve your problem.
Caused by: java.io.IOException: Cannot run program "ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ": error=2, No such file or directory
This indicates it is trying to run "ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; "
without separating the arguments. It literally looks for the path "ssh-agent bash -c 'chmod 600 "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; ssh-add "/usr/local/tomcat/temp/ssh_key_17036759532395112843.pub"; "
So, you probably either just need to add
stub.add("bash");
stub.add("-c");
or separate the arguments into their own stub.add calls. Experiment to get it right. I hope this helps understanding this error message and similar ones in the future.
Upvotes: 2