Java 运行“mvn部署”时如何使用Jenkins凭据?
我有一个Maven项目,希望使用Java 运行“mvn部署”时如何使用Jenkins凭据?,java,maven,jenkins,maven-3,Java,Maven,Jenkins,Maven 3,我有一个Maven项目,希望使用mvn clean deploy构建它,以便将构建的工件部署到Nexus存储库中 该存储库的访问数据(用户名和密码)存储在Jenkins凭据中 我想在Jenkins中调用mvn deploy,以便从Jenkins读取该Nexus存储库的凭据(而不是在settings.xml中硬编码) 如果我无法访问Jenkins服务器上的settings.xml,我该怎么做 更新1: 我在“配置文件管理”(JENKINS_URL/configfiles/index)中创建了一个条
mvn clean deploy
构建它,以便将构建的工件部署到Nexus存储库中
该存储库的访问数据(用户名和密码)存储在Jenkins凭据中
我想在Jenkins中调用mvn deploy
,以便从Jenkins读取该Nexus存储库的凭据(而不是在settings.xml
中硬编码)
如果我无法访问Jenkins服务器上的settings.xml
,我该怎么做
更新1:
我在“配置文件管理”(JENKINS_URL/configfiles/index
)中创建了一个条目,其中包含以下数据:
类型:Maven settings.xml
全部替换:是
服务器ID:myServer
凭据:Nexus存储库的凭据
内容:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>myServer</id>
<username>foo</username>
<password>bar</password>
</server>
</servers>
</settings>
在作业的配置中,我包括如下所示的设置Nexus settings.xml
是“配置文件管理”中的配置
但它不起作用——当构建尝试将工件部署到Nexus时,我会遇到“禁止”错误
更新2:当我使用与Jenkins相同的凭据(存储在我的本地settings.xml
中)在本地运行mvn-X deploy
时,我会看到以下输出:
[DEBUG] Failed to decrypt password for server XXX release repository: org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: java.io.FileNotFoundException: /XXXXXXXXXXXXXXX/.m2/settings-security.xml (No such file or directory)
org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: java.io.FileNotFoundException: /XXXXXXXXXXXXXXX/.m2/settings-security.xml (No such file or directory)
at org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher.decrypt(DefaultSecDispatcher.java:121)
at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt(DefaultSettingsDecrypter.java:107)
at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt(DefaultSettingsDecrypter.java:63)
at org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory.newRepositorySession(DefaultRepositorySystemSessionFactory.java:165)
但是,settings.xml
中的密码根本没有加密:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<offline/>
<pluginGroups/>
<servers>
<server>
<id>NEXUS_REPOSITORY_SNAPSHOTS</id>
<username>user</username>
<password>password</password>
</server>
</servers>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
NEXUS_存储库_快照
用户
密码
.您可以使用Jenkins配置文件提供程序插件(链接:)创建一个或多个Maven settings.xml文件
注意:如果您需要不同的settings.xml,这也会很有帮助
不同的项目
然后在Jenkins项目的maven deploy步骤中,您可以选择指向已定义的settings.xml文件之一(而不是指向常规Jenkins服务器/.m2/settings.xml)您可以使用Jenkins配置文件提供程序插件(链接:)创建一个或多个maven settings.xml文件
注意:如果您需要不同的settings.xml,这也会很有帮助
不同的项目
然后,在Jenkins项目的maven deploy步骤中,您可以选择指向定义的settings.xml文件之一(而不是指向general Jenkins server/.m2/settings.xml)是否要使用pom.xml中存储库的凭据?如果是这样的话,你可以检查@Sambit No,我没有。凭证存储在Jenkins中。Jenkins配置页面中有一个菜单项“凭据”。您可以检查此项。是否要在pom.xml中使用存储库的凭据?如果是这样的话,你可以检查@Sambit No,我没有。凭证存储在Jenkins中。Jenkins配置页面中有一个菜单项“凭据”。您可以检查此项。谢谢你的回答。我觉得我在做类似的事情(如果我错了,请纠正我)——请参阅更新1。您在更新中说,当构建尝试将工件部署到Nexus时,出现了“禁止”错误。您可以共享完整的错误消息吗?以下是错误消息:未能执行目标org.apache.maven.plugins:maven部署插件:2.7:deploy(默认部署)在项目上\u NAME:未能部署工件:无法将工件项目\u NAME:jar:0.0.8从/传输到NEXUS\u存储库\u快照(http://NEXUS_URL/repository/maven-snapshots):拒绝访问:http://NEXUS_URL/repository/maven-snapshots/PROJECT_NAME/0.0.8/PROJECT_NAME-0.0.8.jar,原因短语:禁止。->[帮助1]
您应该避免在内容上定义服务器。只需使用服务器凭据来定义每个服务器,并确保您选择的凭据正确。此外,请确保jenkins服务器能够联系nexus服务器,并且所有变量的计算都正确(例如nexus\u URL)谢谢你的回答。我觉得我在做类似的事情(如果我错了,请纠正我)——请参阅更新1。你在更新中说你得到了“禁止”构建尝试将构件部署到Nexus时出错。您可以共享完整的错误消息吗?以下是错误消息:未能执行目标org.apache.maven.plugins:maven deploy plugin:2.7:deploy(默认部署)在项目上项目名称:未能部署工件:无法将工件项目名称:jar:0.0.8从NEXUS存储库传送到NEXUS存储库\u快照(http://NEXUS_URL/repository/maven-snapshots):拒绝访问:http://NEXUS_URL/repository/maven-snapshots/PROJECT_NAME/0.0.8/PROJECT_NAME-0.0.8.jar,原因短语:禁止。->[帮助1]
您应该避免在内容上定义服务器。只需使用服务器凭据来定义每个服务器,并确保您选择的凭据正确。此外,请确保jenkins服务器能够联系nexus服务器,并且所有变量的计算都正确(例如nexus\u URL)
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<offline/>
<pluginGroups/>
<servers>
<server>
<id>NEXUS_REPOSITORY_SNAPSHOTS</id>
<username>user</username>
<password>password</password>
</server>
</servers>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>