在Jenkins (v1.599)中,在Maven发行版中,我得到以下错误:
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy
(default-deploy) on project myArtifactId: Failed to deploy
artifacts: Could not transfer artifact
myGroupdId:myArtifactId:pom:myVersion from/to
sonatype-nexus-staging
(https://oss.sonatype.org/service/local/staging/deploy/maven2/): peer
not authenticated -> [Help 1]我首先在使用Java 7的构建中遇到了这种情况,但现在我在使用Java 8的构建中也遇到了问题。
经过一些研究,我发现这个问题的发生是因为https.protocols属性。
我注意到输出中的这一行几乎位于顶部:
[workspace] $ /usr/lib/jvm/java-8-oracle//bin/java
-Dhttps.protocols=SSLv3 -Dforce.http.jre.executor=true -cp /opt/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-agent-1.6.jar:/usr/share/maven/boot/plexus-classworlds-2.x.jar
org.jvnet.hudson.maven3.agent.Maven3Main /usr/share/maven
/var/cache/jenkins/war/WEB-INF/lib/remoting-2.49.jar
/opt/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-1.6.jar
/opt/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.6.jar
37213注意参数
-Dhttps.protocols=SSLv3我不知道这个电话是干什么的,也不知道它的效果是什么。mvn调用稍后出现,因此应该启动不同的JVM (即使是在Maven发布插件对进程进行分叉时也会启动几次)。
还请注意,https.protocols的默认值是TLSv1 (Java 7)和TLSv1.2 (Java 8)。
在作业配置中设置此参数没有任何效果,但如果像这样配置Maven发布插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>${plugin.release.version}</version>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
<useReleaseProfile>false</useReleaseProfile>
<arguments>-Psonatype-oss-release -Dusername=${username} -Dhttps.protocols=TLSv1.2</arguments>
</configuration>
</plugin>然后发布就可以了。
我的问题:
更新
我查看了MAVEN_OPTS:
属性没有在那里定义。
发布于 2015-03-06 08:05:01
未通过身份验证的->帮助1
客户端无法验证证书。这可能是因为服务器禁用了SSLv3。
这个-Dhttps.protocols=SSLv3是从哪里来的?
不知道;您可能会更幸运地搜索您的服务器设置/作业配置/查看您的源代码。
这真的是问题的根源吗?似乎是另一个JVM实例..。
如果在服务器上禁用了SSLv3,并且您的客户端被配置为只对话SSLv3,那么它将无法工作。您可以传递多个协议。
例如-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
如果是源,那么在哪里可以配置/删除这个参数?
似乎您已经发现配置插件很好。您可以尝试在您的从环境中重写_JAVA_OPTIONS。
发布于 2015-03-07 13:15:05
它是否来自JVM属性?调用中"-cp“之前的所有内容
/usr/lib/jvm/java-8-oracle//bin/java
-Dhttps.protocols=SSLv3 -Dforce.http.jre.executor=true -cp /opt/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-agent-1.6.jar:/usr/share/maven/boot/plexus-classworlds-2.x.jar
org.jvnet.hudson.maven3.agent.Maven3Main /usr/share/maven
/var/cache/jenkins/war/WEB-INF/lib/remoting-2.49.jar
/opt/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-1.6.jar
/opt/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.6.jar来自系统属性,请参见https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/util/JVMBuilder.java。
你看到什么了吗
/systemInfo
似乎Maven作业中的JVM属性来自Jenkins系统属性,请参阅https://issues.jenkins-ci.org/browse/JENKINS-16331。
发布于 2015-03-06 08:16:25
这个
-Dhttps.protocols=SSLv3是从哪里来的?
我会说詹金斯或者你开始你詹金斯工作的方式。
这真的是问题的根源吗?似乎是另一个JVM实例..。
如果您只启用SSLv3,则意味着客户端和服务器都需要允许并知道如何使用它。现在几乎不认为SSLv3是安全的,您应该将它更改为至少TLSv1。
如果是源,那么在哪里可以配置/删除这个参数?
在Jenkins配置或启动作业的脚本中。有时Jenkins可以“继承”环境的启动方式。检查默认环境Jenkins启动、Jenkins JDK/Java系统配置、Jenkins作业以及运行作业的可能的从主机配置。
https://stackoverflow.com/questions/28618508
复制相似问题