在Jenkins(v1.599)中,在Maven Release版本中,我收到以下错误:
[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 SE 7的构建中首先使用Java SE 7,但现在我在使用Java SE 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 Release Plugin也会启动这个过程)。
另请注意,default values for https.protocols是TLSv1(Java SE 7)和TLSv1.2(Java SE 8)。
在作业配置中设置此参数无效,但如果按照以下方式配置Maven Release Plugin:
<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该属性未在那里定义。
答案 0 :(得分:1)
peer not authenticated - &gt; [帮助1]
客户端无法验证证书。这可能是因为服务器已禁用SSLv3。
这个-Dhttps.protocols = SSLv3来自哪里?
不知道;您可以更好地搜索服务器设置/作业配置/获取源代码。
这真的是问题的根源吗?它似乎是一个不同的JVM实例......
如果在服务器上禁用了SSLv3,并且您的客户端配置为仅与SSLv3通信,那么它将不起作用。您可以传递多种协议
e.g。 -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
如果是源,我在哪里可以配置/删除此参数?
好像你已经发现配置插件工作得很好。
您可以尝试在奴隶环境中覆盖_JAVA_OPTIONS
。
答案 1 :(得分:0)
它可能来自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
你在
中看到了什么&LT; your-Jenkins-URL&gt; / systemInfo
Maven作业中的JVM属性似乎取自Jenkins系统属性,请参阅 https://issues.jenkins-ci.org/browse/JENKINS-16331
答案 2 :(得分:-1)
-Dhttps.protocols=SSLv3
来自哪里?
我会说詹金斯或你开始詹金斯工作的方式。
这真的是问题的根源吗?它似乎是一个不同的JVM 实例...
如果您只启用SSLv3,则意味着客户端和服务器都需要允许并知道如何对话。 SSLv3现在几乎不被认为是安全的,您应该将其更改为至少TLSv1
如果是源,我在哪里可以配置/删除此参数?
在Jenkins配置或启动工作的脚本中。有时詹金斯可以从它自己的启动方式“继承”环境。检查Jenkins启动的默认环境,Jenkins JDK / Java系统配置,Jenkins作业以及可能运行作业的从属主机配置。