Как сделать так, чтобы Hudson поддерживал доступ svn + ssh?
Сегодня моя компания переместила весь репозиторий исходного кода на другой сервер и попросила всех разработчиков начать использоватьsvn+ssh для доступа ко всему исходному коду. Напримерsvn+ssh://example.com/share/svn/repo. Наша компания использует Hudson CI для автоматической сборки исходного кода.
Goal: мне нужно настроитьHudson, чтобы он поддерживал доступ кsvn+ssh.
1. Попробуйте F-Secure Authentication Agent
Я пытаюсь использовать F-Secure Authentication Agent для генерации пары ключей - открытого и закрытого ключей. Однако, когда я отправляю закрытый ключ в Hudson Subversion Authentication, я нажимаю следующую ошибку Hudson.
Error Attempting a public key authentication with username example Failed to authenticate: svn: File 'NULL' is not valid OpenSSH DSA or RSA private key file FAILED: svn: Authentication failed for svn+ssh://example.com/share/svn/repo
Понятия не имею, что случилось, похоже, Хадсон не распознал формат закрытого ключа, созданный агентом F-Secure Authentication Agent.
2. Попробуйте Putty
Я пытаюсь использовать Putty для генерации пары ключей - открытый ключ и закрытый ключ. Однако, когда я отправляю закрытый ключ в Hudson Subversion Authentication, я получаю другую ошибку.
javax.servlet.ServletException: java.lang.NullPointerException org.kohsuke.stapler.Stapler.invoke(Stapler.java:449) org.kohsuke.stapler.MetaClass$9.doDispatch(MetaClass.java:263) org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:30) org.kohsuke.stapler.Stapler.invoke(Stapler.java:440) org.kohsuke.stapler.Stapler.invoke(Stapler.java:361) org.kohsuke.stapler.Stapler.service(Stapler.java:121) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:61) hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:53) hudson.security.HudsonFilter.doFilter(HudsonFilter.java:88) root cause java.lang.NullPointerException org.kohsuke.putty.PuTTYKey.toKey(PuTTYKey.java:140) org.kohsuke.putty.PuTTYKey.(PuTTYKey.java:108) org.kohsuke.putty.PuTTYKey. (PuTTYKey.java:69) hudson.scm.SubversionSCM$DescriptorImpl.doPostCredential(SubversionSCM.java:1111) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:103) org.kohsuke.stapler.Function.bindAndinvoke(Function.java:57) org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:75) org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:30) org.kohsuke.stapler.Stapler.invoke(Stapler.java:440) org.kohsuke.stapler.MetaClass$9.doDispatch(MetaClass.java:263) org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:30) org.kohsuke.stapler.Stapler.invoke(Stapler.java:440) org.kohsuke.stapler.Stapler.invoke(Stapler.java:361) org.kohsuke.stapler.Stapler.service(Stapler.java:121) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:61) hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:53) hudson.security.HudsonFilter.doFilter(HudsonFilter.java:88)
Похоже, формат закрытого ключа Putty не подходит и для Hudson. Хм… я думал, что все методы генерации закрытых ключей должны соответствовать какому-то стандарту?
Решение
Googling Hudson ……. Ошибка поиска… .Googling…. целый день, я узнаюHudson is using OpenSSH private key format. Есть ли другие инструменты, которые я могу использовать для преобразования моего существующего закрытого ключа в формат OpenSSH?
Да,PuTTYgen.exe имеет функцию дляconvert putty private key to OpenSSH private key format. Great news, i import my existing Putty generated private key and click on the export to OpenSSH format.
После экспорта в формат OpenSSH закрытый ключ работает как шарм! Теперь Hudson поддерживает доступ svn + ssh.
Note
Я также обнаружил следующую ошибку во время настройки Hudson для поддержки svn + ssh, я думаю, что это также связано с недопустимым форматом закрытого ключа. После использования формата OpenSSH эта ошибка тоже исчезла.
INFO: Failed to access subversion repository svn+ssh://example.com/share/svn/repo org.tmatesoft.svn.core.SVNCancelException: svn: No credential to try. Authentication failed at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:36) at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:31) ... at org.tmatesoft.svn.core.internal.io.svn.SVNSSHConnector.open(SVNSSHConnector.java:70) at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.open(SVNConnection.java:73)