gpt4 book ai didi

amazon-web-services - 使用 sbt 将 Artifact 发布到 AWS CodeArtifact

转载 作者:行者123 更新时间:2023-12-05 00:55:26 25 4
gpt4 key购买 nike

我正在尝试使用 sbt 将 Artifact 发布到 AWS CodeArtifact,但遇到了一些麻烦;

给定一个 sbt 项目,运行命令 sbt publish 包被上传到 repo,但它仍然处于 Unfinished 状态。 AWS CodeArtifact documentation说:

Unfinished: The last attempt to publish did not complete. Currently only Maven package versions can have a status of Unfinished. This can occur when the client uploads one or more assets for a package version but does not publish a maven-metadata.xml file for the package that includes that version.

我使用的是 1.3.3 版本的 sbt,我没有使用插件,属性 publishMavenStyletrue .

我知道 sbt-maven-resolver (here repo) 解决了这个问题,但它似乎是一个“未关注的插件”,而且,使用它我丢失了所有关于发布过程,我不信任它。

有没有人遇到过同样的问题并以某种方式解决了?

最佳答案

将 CodeArtifact 与 SBT 结合使用

  1. 使用 CodeArtifact 设置 SBT
  2. 使用 SBT 发布包(同时避免 Artifact 处于 Unfinished 状态。)

1。使用 CodeArtifact 设置 SBT

  1. 使用 Maven 上游创建 CodeArtifact 存储库。对于这个例子,我们将在域启动操作中使用存储库 maven-test

  2. 在控制台中打开 Connection Instructions 并选择 mvn。稍后我们将需要这方面的信息。

  3. 从控制台复制导出“CODEARTIFACT_AUTH_TOKEN”环境变量的命令并在您的环境中运行它。这会将“CODEARTIFACT_AUTH_TOKEN”设置为我们存储库的密码,用户名始终为 aws。

  4. 在 build.sbt 文件中导入 sbt.Credentials:

     import sbt.{Credentials}
  5. 现在我们需要设置凭据。为此,我们首先要读取 CODEARTIFACT_AUTH_TOKEN 环境变量:

     val repoPass = sys.env.get("CODEARTIFACT_AUTH_TOKEN").getOrElse("")
  6. 接下来,我们将使用之前导入的 sbt.Credentials 来设置一组新的 Credentials:

     credentials += Credentials("launchops/maven-test", "launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com", "aws", repoPass)

传递给 Credentials 对象的值为 ("domain-name/repository-name"、"repository hostname without protocol"、"username"、"password"),用户名始终为 aws,密码来自 repoPass 变量我们只需要修改前两个以指向我们的存储库。

  1. 现在我们只需要指示 SBT 使用我们的存储库作为解析器。控制台连接指令会生成 Maven 设置,例如:

     <repository>
    <id>launchops--maven-test</id>
    <url>https://launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com/maven/maven-test/</url>
    </repository>

我们将使用这些值在我们的 build.sbt 文件中创建解析器:

    resolvers += "launchops--maven-test" at "https://launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com/maven/maven-test"

其格式为“resolvers += "ID From maven configuration in console"at "Repository URL from maven configuration in console"。

  1. 要完全禁用公共(public) Maven 存储库(强制 CodeArtifact 使用),您可以在 build.sbt 文件中添加以下行:

     externalResolvers := Resolver.combineDefaultResolvers(resolvers.value.toVector, mavenCentral = false)

执行这些设置步骤后,您应该能够运行 sbt update 并观察通过 CodeArtifact 下载的包。

示例 build.sbt 供引用:

import sbt.{Credentials, Path}

name := "scala-test"

version := "0.3.0"

scalaVersion := "2.12.6"

organization := "com.abc.def"

val repoPass = sys.env.get("CODEARTIFACT_AUTH_TOKEN").getOrElse("")
credentials += Credentials("launchops/maven-test", "launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com", "aws", repoPass)

resolvers += "launchops--maven-test" at "https://launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com/maven/maven-test"

libraryDependencies ++= Seq(
"org.scalatest" %% "scalatest" % "3.0.0" % "test",
"io.nats" % "jnats" % "2.0.0",
"org.json4s" %% "json4s-native" % "3.6.0"
)

2。发布包

除了拉取依赖外,SBT 还可以用来发布包。要将 SBT 发布到 CodeArtifact,我们首先需要在 build.sbt 文件中进行设置:

将以下内容添加到文件中:

publishMavenStyle := true
publishTo := Some("launchops--maven-test" at "https://launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com/maven/maven-test")

此时,从技术上讲,运行 sbt publish 会将包推送到 CodeArtifact,但最终会处于 Unfinished 状态。我们需要使用 sbt-maven-resolver 插件来帮助获取正确格式的包:https://github.com/sbt/sbt-maven-resolver

在 project/plugins.sbt 文件中添加以下行:

addSbtPlugin("org.scala-sbt" % "sbt-maven-resolver" % "0.1.0")

现在您可以运行 sbt publish 并将包成功发布到 CodeArtifact。如果您看到错误,请确保您使用的是最新版本的 SBT。

关于amazon-web-services - 使用 sbt 将 Artifact 发布到 AWS CodeArtifact,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64620633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com