SBT Плагин Репо Плагин Пакеты Пакетных Служб (Web)

Я пытаюсь использовать проекты на основе SBT с Visual Studio Team Services, в частности плагин Packages.

В плагине пакетов есть четкие инструкции о том, как заставить его работать с Maven, но я не смог определить средства для адаптации инструкций для SBT, так как они, похоже, полагаются на взлом на основе конфигурации HTTP-интерфейса Maven.

У меня есть конкретные инструкции:

Добавьте учетные данные в ваш файл settings.xml пользователя внутри <servers> тег

<server>
    <id>projectspace-visualstudio.com-java</id>
    <configuration>
        <httpHeaders>
            <property>
                <name>Authorization</name>
                <!--Treat this auth token like a password. Do not share it with anyone, including Microsoft support. The generated token expires on or before 12/24/2017-->
                <value>Basic dXNlci5uYW1lOjQ5ZmphMm1leUowZVhBZ09pSktWMVFpTENKaGJHY2lPaUpTVXpJMU5pSXNJbmcxZENJNkltOVBkbU42TlUxZk4zQXRTR3BKUzJ4R1dIbzVNM1ZmVmpCYWJ5SjkuZXlKdVlXMWxhV1FpT2lKak5qZGhORFZoWmkwME5UZ3lMVFpsTlRFdFltUXhNeTB6WTJRMk1HVTJPRGhpTmpjaUxDSnpZM0FpT2lKMmMyOHVaSEp2Y0Y5M2NtbDBaU0IyYzI4dWNHRmphMkZuYVc1blgzZHlhWFJsSWl3aVlYVnBJam9pWTJZM1l6ZGxaRGt0TXpVeE55MDBZalU1TFRrMk4yRXRaalZoWW1RNE16UTNaV1UySWl3aWMybGtJam9pWVdZek1XRXpOVEF0TXpBNVl5MDBNalF3TFdKbU1XRXRZelV4TURJek5HWXhPV0ppSWl3aWFYTnpJam9pWVhCd0xuWnpjM0J6TG5acGMzVmhiSE4wZFdScGJ5NWpiMjBpTENKaGRXUWlPaUpoY0hBdWRuTnpjSE11ZG1semRXRnNjMzFaR2x2TG1OdmJYeDJjMjg2WWpFME5tUTBZalF0TVRSaU55MDBOVE5qTFdJNU5qa3RZVEpoTXpsaFpEZGtNVGc0SWl3aWJtSm1Jam94TlRBMk16M016UTVMQ0psZUhBaU9qRTFNVFF4TkRNek5UQjkuQkJLY25Wa1dZbHYwTFJrZkVIQnpEY3loaFJodTFwTmhFNk51WTB5UEFDTDY4MktiRGVTRXNTUWFZSkJOcG82Y3Bnal9lZThBbkhqc1otUG1PYWY0aGtsVE1Dd3hwbDhuTXdSRzVYeGJWMTFFS1lTOFFhMTdvWFFGY1JIMl9JbG84MlJMMS1PWlAxXzExcEZ0TU1ST0tTVW85X0ttTGM3RzF2YWlJcXc5YkFrejEyemRGeUNobVJEWmFDdWFBV1NQaUU1VVRPaV9aMi1oS291UVBWd0E4N29oelpZMjU0X25fN0o3UFdnczUweXVOaXZRc3Q5Y1U5MGJPMWNZWHUyMmtLMEVyeC05ZlptMUlwWGRoQ1hkZm1aTDlxUWFSbnp5dW9QaGVFelJoZWd6bExNTjFSaVk1U0FwOENqR1FnR3NmWEZsNlNMTnNYYnhUOUd0YjVGRUJ3</value>
            </property>
        </httpHeaders>
    </configuration>
</server>

Примечание. Учетные данные намеренно немного отличаются от того, что было назначено по понятным причинам. Содержимое принудительного заголовка auth представляет собой стандартную комбинацию имени пользователя: пароля Base64.

Далее они инструктируют

Добавьте это в ваш проект pom.xml внутри обоих <repositories> тег и <distributionManagement> тег

<repository>
    <id>projectspace-visualstudio.com-java</id>

  <url>https://projectspace.pkgs.visualstudio.com/_packaging/java/maven/v1</url>
    <releases>
        <enabled>true</enabled>
    </releases>
    <snapshots>
        <enabled>true</enabled>
    </snapshots>
</repository>

Я попытался взломать это имя пользователя и пароль, присвоить их записи Credentials и попытаться опубликовать на " https://projectspace.pkgs.visualstudio.com/_packaging/java/maven/v1", но это неизбежно завершится неудачей.

Насколько я могу судить, система пакетов VSTS не предоставляет стандартную проверку подлинности HTTP с Realm, а без SBT Realm (или это Ivy?) Никогда не пытается отправлять учетные данные, отказываясь. Тем временем Maven просто отправляет учетные данные с первой попытки.

Есть ли способ заставить SBT отправлять учетные данные независимо или аналогично прикреплять обязательный заголовок? (Или я полностью ошибся в диагностике проблемы?)

Благодарю.

1 ответ

Решение

Я думаю, что наткнулся на решение, пытаясь добавить больше информации в мой вопрос.

После попытки преднамеренного сбоя при загрузке с помощью CURL я обнаружил в подробном выводе:

< WWW-Authenticate: Bearer authorization_uri=https://login.windows.net/67dd666e-d00e-4f5f-9f71-76760f050c78
< WWW-Authenticate: Basic realm="https://pkgsprodscussu2.app.pkgs.visualstudio.com/"
< WWW-Authenticate: TFS-Federated

После изменения моего царства на https://pkgsprodscussu2.app.pkgs.visualstudio.com/ SBT неожиданно смог опубликовать.

Ура. К сожалению, кажется, что нет гарантии того, что значение области стабильно, но, по крайней мере, пока работает.

Для справки других, это решение, которое я закончил с:

publishTo in ThisBuild := Some("vsts" at "https://projectspace.pkgs.visualstudio.com/_packaging/java/maven/v1/")

credentials in ThisBuild += {
  import java.nio.charset.StandardCharsets
  import java.util.Base64

  val decodedArray: Array[Byte] = Base64.getDecoder.decode(
    """dXNlci5uYW1lOjQ5ZmphMm1leUowZVhBZ09pSktWMVFpTENKaGJHY2lPaUpTVXpJMU5pSXNJbmcxZENJNkltOVBkbU42TlUxZk4zQXRTR3BKUzJ4R1dIbzVNM1ZmVmpCYWJ5SjkuZXlKdVlXMWxhV1FpT2lKak5qZGhORFZoWmkwME5UZ3lMVFpsTlRFdFltUXhNeTB6WTJRMk1HVTJPRGhpTmpjaUxDSnpZM0FpT2lKMmMyOHVaSEp2Y0Y5M2NtbDBaU0IyYzI4dWNHRmphMkZuYVc1blgzZHlhWFJsSWl3aVlYVnBJam9pWTJZM1l6ZGxaRGt0TXpVeE55MDBZalU1TFRrMk4yRXRaalZoWW1RNE16UTNaV1UySWl3aWMybGtJam9pWVdZek1XRXpOVEF0TXpBNVl5MDBNalF3TFdKbU1XRXRZelV4TURJek5HWXhPV0ppSWl3aWFYTnpJam9pWVhCd0xuWnpjM0J6TG5acGMzVmhiSE4wZFdScGJ5NWpiMjBpTENKaGRXUWlPaUpoY0hBdWRuTnpjSE11ZG1semRXRnNjMzFaR2x2TG1OdmJYeDJjMjg2WWpFME5tUTBZalF0TVRSaU55MDBOVE5qTFdJNU5qa3RZVEpoTXpsaFpEZGtNVGc0SWl3aWJtSm1Jam94TlRBMk16M016UTVMQ0psZUhBaU9qRTFNVFF4TkRNek5UQjkuQkJLY25Wa1dZbHYwTFJrZkVIQnpEY3loaFJodTFwTmhFNk51WTB5UEFDTDY4MktiRGVTRXNTUWFZSkJOcG82Y3Bnal9lZThBbkhqc1otUG1PYWY0aGtsVE1Dd3hwbDhuTXdSRzVYeGJWMTFFS1lTOFFhMTdvWFFGY1JIMl9JbG84MlJMMS1PWlAxXzExcEZ0TU1ST0tTVW85X0ttTGM3RzF2YWlJcXc5YkFrejEyemRGeUNobVJEWmFDdWFBV1NQaUU1VVRPaV9aMi1oS291UVBWd0E4N29oelpZMjU0X25fN0o3UFdnczUweXVOaXZRc3Q5Y1U5MGJPMWNZWHUyMmtLMEVyeC05ZlptMUlwWGRoQ1hkZm1aTDlxUWFSbnp5dW9QaGVFelJoZWd6bExNTjFSaVk1U0FwOENqR1FnR3NmWEZsNlNMTnNYYnhUOUd0YjVGRUJ3"""
  )

  val decodedString = new String(decodedArray, StandardCharsets.UTF_8)

  print("decoded: ")
  println(decodedString)

  val Array(userName, passwd) = decodedString.split(":", 2)

  Credentials(
    realm = "https://pkgsprodscussu2.app.pkgs.visualstudio.com/",
    host = "projectspace.pkgs.visualstudio.com",
    userName = userName,
    passwd = passwd
  )
}

Для меня это работает так:

Вам нужно перейти к артефактам, выбрать ваш канал и открыть подключение к каналу. Здесь открыты Gradle и сгенерирован пароль, имя пользователя будет в настройках Gradle на этой странице. А затем используйте следующие настройки в вашей сборке sbt.

val azureArtifactory ="Azure artifactory" at "https://projectspace.pkgs.visualstudio.com/_packaging/java/maven/v1/"

val azureArtifactoryCreds = Credentials(
    ""https://projectspace.pkgs.visualstudio.com",
    "projectspace.pkgs.visualstudio.com", USER_NAME,
    PASSWORD)```

.settings(publishTo in ThisBuild := Some(azureArtifactory),
  credentials += azureArtifactoryCreds)
Другие вопросы по тегам