JenkinsでGit Pluginを使用してHttpsコードライブラリにアクセスできなかった問題

4072 ワード

最近JenkinsでJobを構成する必要があります.SCMソースはhttp://git.opendaylight.org/gerrit/p/integration.gitそこでJenkinsのGit Pluginを使ってこのことをしました.その結果、次のようにエラーが発生しました.
hudson.plugins.git.GitException: Failed to fetch from https://git.opendaylight.org/gerrit/p/integration.git
        at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:627)
        at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:865)
        at hudson.plugins.git.GitSCM.checkout(GitSCM.java:890)
        at hudson.model.AbstractProject.checkout(AbstractProject.java:1415)
        at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652)
        at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
        at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:561)
        at hudson.model.Run.execute(Run.java:1678)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
        at hudson.model.ResourceController.execute(ResourceController.java:88)
        at hudson.model.Executor.run(Executor.java:231)
Caused by: hudson.plugins.git.GitException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.checkCredentials(CliGitAPIImpl.java:2198)
        at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1152)
        at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$200(CliGitAPIImpl.java:87)
        at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:266)
        at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:625)
        ... 10 more

しかし、コマンドラインでgit cloneを直接実行するのは良いのですが、違いはどこにあるのでしょうか.ネットで調べてみると、Jenkins全体がJavaの上に構築されているという考え方が得られました.gitの引き継ぎの範囲に入る前に、Javaが何かをしていました.git自体が仕事ができる以上、Java側の問題だったはずです.具体的なエラーを調べると、SSL/TSL証明書と関係があることがわかりました.StackOverflowでgit plugin自体にバグがあるとhttpsをサポートできないという同志がいるのを見て、そうではないかと思いgit pluginのホームページ(https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin)も何の手がかりも見つからなかった.そこでgithubのあるhttpsのgitライブラリを勝手に試してみましたが、cloneしてもいいので、httpsをサポートしても大丈夫だということです.では、問題はどこにあるのでしょうか.SSL/TSLの原理を復習した後、証明書を発行するCAに問題があると考え、ブラウザで両者のCAの違いを調べてみました.
在Jenkins中使用Git Plugin访问Https代码库失败的问题 在Jenkins中使用Git Plugin访问Https代码库失败的问题
githubはDigiCertの証明書を使用し、opendaylightはStartComを使用しています.インターネットで調べてみると、このStartComが発行した整数は意外にも無料だった.こうしてみると、JavaがこのCAを信用していないのが原因かもしれません.では、解決策はこのCAをJavaの信頼リストに追加することです.具体的なやり方は以下の通りである:1.まずStartComの証明書ファイル(xxx.cer)を入手します.どこから入手しますか?ブラウザが正常にアクセスできる以上、システムではStartComの証明書を信頼していることを示しますので、まずシステムの証明書管理インタフェースを開きます.MacではKeychainで、開いてからStartComの証明書を見つけて、それから右クリックして.cerファイルにエクスポートしてstartcom.cerと名付けます.
2.次のコマンドを使用して、Javaのランタイムシステムに上記のcerファイルをインポートします.
keytool -import -alias startcom  -keystore %JRE_HOME/lib/security/cacerts  -file startcom.cer

このコマンドを実行するとパスワードの入力を求められますが、変更していない場合はパスワードが「changeit」で次のコマンドを実行すると、StartComが追加されていることがわかります.
keytool -list -keystore  %JRE_HOME/lib/security/cacerts  | less

そしてJenkinsでgitパスを設定しgit cloneに成功!