Как авторизоваться в репозитории maven с помощью drone.io - PullRequest
0 голосов
/ 15 февраля 2020

Итак, на моем сервере вместе с хранилищем nexus3 запущен автономный экземпляр drone . Теперь у меня есть проект java, который должен быть собран, протестирован и затем развернут в репозитории каждый pu sh, который работает нормально, пока мы не перейдем к части развертывания. Я нашел плагин на официальном сайте для плагинов Maven Auth , который должен создавать настройки. xml на основе конфигурации, которая работает (заставил мой конвейер выводить содержимое файла через cat и показал действительные настройки. xml файл). Следующий шаг настроен для запуска

mvn deploy -B -s settings.xml

По какой-то причине maven не использует имя пользователя и пароль, указанные в настройках. xml (сервер всегда возвращает несанкционированный Ошибка 401)

Весь .drone.yml:

kind: pipeline
name: default
type: docker

steps:
  - name: compile
    image: maven:3-jdk-8
    commands:
      - mvn compile -B -U
    when:
      event:
        - push
  - name: test
    image: maven:3-jdk-8
    commands:
      - mvn test -B
    when:
      event:
        - push
  - name: authenticate
    image: robertstettner/drone-mvn-auth
    settings:
      servers:
        - id: some-id (same in pom.xml distribution repos)
          username: username
          password:
            from_secret: repo_password
  - name: deploy_repo
    image: maven:3-jdk-8
    commands:
      - mvn deploy -B -gs settings.xml
    when:
      event:
        - push

Несколько советов, почему это не работает, было бы допингом! Заранее спасибо!

Редактировать 2: Итак, я провел дальнейшее расследование и установил mitmproxy на своем сервере для анализа трафика c (Клиент -> Nginx SSL-завершение прокси -> mitmproxy - > работает nexus).

Для авторизации, очевидно, maven использует заголовок под названием «Авторизация». И содержимое «Basi c» + имя пользователя: пароль, закодированный в base64.

Оказывается, содержимое заголовка Authorization из запроса, выданного экземпляром дрона, искажено. Расшифровано это выглядит так:

Authorization: Basic USERNAME:[object Object]

вместо

Authorization: Basic USERNAME:password

Я собираюсь попытаться обойти

password:
  from_secret: repo_password

и надеюсь настройки. xml файл сгенерирован правильно

1 Ответ

0 голосов
/ 15 февраля 2020

После нескольких часов попыток (и неуспешных) попыток заставить работать этот плагин я решил использовать пользовательский шаг для создания настроек. xml с использованием переменных среды. Просто установите секретный «repo_username» для имени пользователя и секретный «repo_password» для пароля, и вам должно быть хорошо: go.

  - name: create settings.xml
    image: alpine:latest
    environment:
      REPO_ID: sytm-nexus
      REPO_USERNAME:
        from_secret: repo_username
      REPO_PASSWORD:
        from_secret: repo_password
    commands:
      - echo '<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"><servers><server><id>'$REPO_ID'</id><username>'$REPO_USERNAME'</username><password>'$REPO_PASSWORD'</password></server></servers></settings>' > settings.xml

Редактировать: так как это решение было слишком хакерским для меня, я создал мой собственный плагин дрон, который можно найти здесь

...