У меня есть проект Maven, и я хочу построить его, используя mvn clean deploy
, чтобы встроенный артефакт был развернут в репозитории Nexus.
Данные доступа (имя пользователя и пароль) для этого репозитория хранятся в Jenkins учетные данные.
Я хочу позвонить mvn deploy
в Jenkins, чтобы учетные данные для этого хранилища Nexus читались из Jenkins (не жестко закодированы в settings.xml
).
Как я могу это сделать, если я не могу получить доступ к settings.xml
на сервере Jenkins?
Обновление 1:
Я создал запись в «Управление файлами конфигурации» (JENKINS_URL/configfiles/index
) со следующими данные:
Тип: Maven settings.xml
Заменить все: Да
Идентификатор сервера: myServer
Учетные данные: Credentials for the Nexus repository
Содержимое:
<?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>
myServer
также используется в pom.xml
артефакта, который я хочу построить:
<distributionManagement>
<repository>
<id>myServer</id>
<url>http://nexus.mycompany.com</url>
</repository>
</distributionManagement>
В настройку задания я включаю эти настройки, как показано ниже. Nexus settings.xml
- это конфигурация из «Config File Management».
Но это не работает - я получаю «Запрещенную» ошибку при сборке пытается развернуть артефакты в Nexus.
Обновление 2: Когда я запускаю mvn -X deploy
локально с теми же учетными данными, что и в Jenkins (хранятся в моем локальном settings.xml
), я вижу следующий вывод :
[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>
Я нашел сообщение о подобной ошибке здесь .