詹金斯:https.protocols

时间:2015-02-19 22:46:29

标签: java jenkins maven-release-plugin

在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>

然后发布正常。

我的问题:

  • 这个-Dhttps.protocols = SSLv3来自哪里?
  • 这真的是问题的根源吗?它似乎是一个不同的JVM实例......
  • 如果是来源,我可以在哪里配置/删除此参数?

更新

我在:

检查了MAVEN_OPTS
  • Jenkins - &gt;构造
  • 的/ etc /默认/詹金斯
  • env | grep MAVEN_OPTS

该属性未在那里定义。

3 个答案:

答案 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作业以及可能运行作业的从属主机配置。