Как использовать учетные данные Jenkins при запуске `mvn deploy`? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть проект 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>

Edit configuration file

myServer также используется в pom.xml артефакта, который я хочу построить:

    <distributionManagement>
        <repository>
            <id>myServer</id>
            <url>http://nexus.mycompany.com</url>
        </repository>
    </distributionManagement>

В настройку задания я включаю эти настройки, как показано ниже. Nexus settings.xml - это конфигурация из «Config File Management».

Jenkins build configuration

Но это не работает - я получаю «Запрещенную» ошибку при сборке пытается развернуть артефакты в 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>

Я нашел сообщение о подобной ошибке здесь .

1 Ответ

2 голосов
/ 19 февраля 2020

Вы можете использовать плагин Jenkins config-file-provider (ссылка: https://plugins.jenkins.io/config-file-provider/) для создания одного или нескольких параметров Maven. xml файлы.

ПРИМЕЧАНИЕ: Действительно, это также помогает, если вам нужны разные настройки. xml для разных проектов.

Затем на этапе развертывания maven вашего проекта Jenkins вы Можно выбрать указать одну из настроек. xml определенные файлы (вместо указания на общий сервер Jenkins /.m2/settings.xml)

...