在 127.0.0.1 上启动 https Jenkins 服务器
Starting https Jenkins server on 127.0.0.1
令人尴尬的是,我只读了 Jenkins 持续集成指南 的一页,我已经卡在这个命令上了:
Java -jar jenkins.war --httpsPort=8443 --httpPort=-1
在我的 Mac 上,抛出了:
Running from: /home/NAThompson/jenkins/war/target/jenkins.war
webroot: $user.home/.jenkins
Feb 22, 2015 7:37:24 PM winstone.Logger logInternal
INFO: Beginning extraction from war file
Using one-time self-signed certificate
Feb 22, 2015 7:37:24 PM winstone.Logger logInternal
INFO: Winstone shutdown successfully
Feb 22, 2015 7:37:24 PM winstone.Logger logInternal
SEVERE: Container startup failed
java.io.IOException: Failed to start a listener: winstone.HttpsConnectorFactory
at winstone.Launcher.spawnListener(Launcher.java:209)
at winstone.Launcher.<init>(Launcher.java:149)
at winstone.Launcher.main(Launcher.java:354)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at Main._main(Main.java:293)
at Main.main(Main.java:98)
Caused by: java.lang.NoClassDefFoundError: sun/security/x509/CertAndKeyGen
at winstone.HttpsConnectorFactory.start(HttpsConnectorFactory.java:100)
at winstone.Launcher.spawnListener(Launcher.java:207)
... 8 more
Caused by: java.lang.ClassNotFoundException: sun.security.x509.CertAndKeyGen
at java.net.URLClassLoader.run(URLClassLoader.java:372)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 10 more
我该怎么做才能解决这个问题?作为无关信息,服务器可以使用 http
.
正常启动
首先,我不建议在 Mac 环境中使用 运行 Jenkins,除非您正在为 Mac/IOS 开发。在这种情况下,Java 安装 and/or 配置有错误。真正的错误是ClassNotFoundException: sun.security.x509.CertAndKeyGen
。您应该根据您正在使用的 Jenkins 版本的要求验证您的 Java 版本。我读了一些博客文章,暗示这可能与您 (Mac OS) 的 Java 版本不一致 运行。
其次,您不太可能会使用 Mac 来满足您的 CI 需求。您真的应该研究 运行 模拟您的 CI 环境的本地虚拟机。您可以使用 VirtualBox and Vagrant.
等开源工具轻松入门
这看起来像是 known issue 尝试直接从 jenkins.war 使用 HTTPS。有些人建议从 Tomcat 内部使用 运行 Jenkins 并让 Tomcat 处理 SSL(不过,我还没有亲自尝试过)。
我通过使用 Java 7 将 Jenkins 设置为 运行 为自己解决了这个问题。我运行将它作为一项服务,所以我通过编辑 jenkins-runner.sh 文件。我添加了以下行:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home"
然后将最后两行修改为:
echo $JAVA_HOME/bin/java $javaArgs -jar "$war" $args
exec $JAVA_HOME/bin/java $javaArgs -jar "$war" $args
我还确保在创建自签名证书后设置 httpsKeyStore 和 httpsKeyStorePassword 属性(使用 SSL 下的说明:Installing and Configuring Jenkins)
令人尴尬的是,我只读了 Jenkins 持续集成指南 的一页,我已经卡在这个命令上了:
Java -jar jenkins.war --httpsPort=8443 --httpPort=-1
在我的 Mac 上,抛出了:
Running from: /home/NAThompson/jenkins/war/target/jenkins.war
webroot: $user.home/.jenkins
Feb 22, 2015 7:37:24 PM winstone.Logger logInternal
INFO: Beginning extraction from war file
Using one-time self-signed certificate
Feb 22, 2015 7:37:24 PM winstone.Logger logInternal
INFO: Winstone shutdown successfully
Feb 22, 2015 7:37:24 PM winstone.Logger logInternal
SEVERE: Container startup failed
java.io.IOException: Failed to start a listener: winstone.HttpsConnectorFactory
at winstone.Launcher.spawnListener(Launcher.java:209)
at winstone.Launcher.<init>(Launcher.java:149)
at winstone.Launcher.main(Launcher.java:354)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at Main._main(Main.java:293)
at Main.main(Main.java:98)
Caused by: java.lang.NoClassDefFoundError: sun/security/x509/CertAndKeyGen
at winstone.HttpsConnectorFactory.start(HttpsConnectorFactory.java:100)
at winstone.Launcher.spawnListener(Launcher.java:207)
... 8 more
Caused by: java.lang.ClassNotFoundException: sun.security.x509.CertAndKeyGen
at java.net.URLClassLoader.run(URLClassLoader.java:372)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 10 more
我该怎么做才能解决这个问题?作为无关信息,服务器可以使用 http
.
首先,我不建议在 Mac 环境中使用 运行 Jenkins,除非您正在为 Mac/IOS 开发。在这种情况下,Java 安装 and/or 配置有错误。真正的错误是ClassNotFoundException: sun.security.x509.CertAndKeyGen
。您应该根据您正在使用的 Jenkins 版本的要求验证您的 Java 版本。我读了一些博客文章,暗示这可能与您 (Mac OS) 的 Java 版本不一致 运行。
其次,您不太可能会使用 Mac 来满足您的 CI 需求。您真的应该研究 运行 模拟您的 CI 环境的本地虚拟机。您可以使用 VirtualBox and Vagrant.
等开源工具轻松入门这看起来像是 known issue 尝试直接从 jenkins.war 使用 HTTPS。有些人建议从 Tomcat 内部使用 运行 Jenkins 并让 Tomcat 处理 SSL(不过,我还没有亲自尝试过)。
我通过使用 Java 7 将 Jenkins 设置为 运行 为自己解决了这个问题。我运行将它作为一项服务,所以我通过编辑 jenkins-runner.sh 文件。我添加了以下行:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home"
然后将最后两行修改为:
echo $JAVA_HOME/bin/java $javaArgs -jar "$war" $args
exec $JAVA_HOME/bin/java $javaArgs -jar "$war" $args
我还确保在创建自签名证书后设置 httpsKeyStore 和 httpsKeyStorePassword 属性(使用 SSL 下的说明:Installing and Configuring Jenkins)