SBT发布到Visual Studio Team Services(Web)程序包插件存储库

Sat*_*ear 5 sbt azure-devops

我正在尝试将SBT驱动的项目与Visual Studio Team Services配合使用,特别是Packages插件。

软件包插件有明确的说明,说明如何使其与Maven一起使用,但是由于它们似乎依赖于配置驱动的Maven HTTP接口,因此我无法确定一种适应SBT的方法。

我的具体说明是:

<servers>标记内将凭据添加到您的用户settings.xml

<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>
Run Code Online (Sandbox Code Playgroud)

注意:由于明显的原因,此处的凭证故意与实际分配的凭证有所冲突。强制执行的auth标头的内容是标准的Auth-Basic Base64用户名:密码组合。

他们进一步指示

将其添加到<repositories>标签和<distributionManagement>标签内的项目pom.xml中

<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>
Run Code Online (Sandbox Code Playgroud)

我尝试将用户名和密码分配出去,将它们分配给Credentials条目,然后尝试发布到“ https://projectspace.pkgs.visualstudio.com/_packaging/java/maven/v1 ”,但这不可避免地失败了。

据我所知,VSTS软件包系统不会通过Realm发出标准的HTTP Auth挑战,并且如果没有Realm SBT(或者它是Ivy?),也永远不会尝试发送凭据,而放弃。同时,Maven仅在第一次尝试时发送凭据。

是否有一种方法可以使SBT不管是否发送凭据,或类似地附加必需的标头?(还是我完全误诊了该问题?)

谢谢。

Sat*_*ear 6

我想在尝试向问题中添加更多信息时偶然发现了解决方案。

在尝试通过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
Run Code Online (Sandbox Code Playgroud)

将我的领域更改为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
  )
}
Run Code Online (Sandbox Code Playgroud)


Vla*_*ski 4

对我来说它是这样工作的:

您需要转到 Artifacts,选择您的 feed 并打开连接到 feed。有打开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)
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,我认为现在这可能是一种更简单的方法,当这个解决方案最初发布时,Gradle 支持还不存在。 (2认同)