【问题标题】:Setting the value of a variable from build.sbt in the Jenkins job在 Jenkins 作业中从 build.sbt 设置变量的值
【发布时间】:2021-07-23 02:28:27
【问题描述】:

我是 Jenkins 和 Sbt 的新手,我正在尝试在 build.sbt 中声明的 jenkins 中设置变量的值。 为了解释,我正在尝试在工件存储库中发布 jars。 我有两个存储库,一个用于发布,另一个用于快照。 在 build.sbt 中:

publishTo := Some("Artifactory Realm" at "https://artifactory.mycloud.something.com/artifactory/sbt-handlereleases")
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")
resolvers += "Artifactory" at "https://artifactory.mycloud.something.com/artifactory/sbt-handlereleases/"

在 Jenkins 作业中(构建 > 执行 shell):

sbt clean compile package publish

此代码使我能够在 artifactory 的发布存储库中发布 jar。 但是,如果我想在快照存储库中发布,我将不得不使用快照存储库的正确 URL (https://artifactory.mycloud.something.com/artifactory/sbt-handlesnapshots) 修改 build.sbt。

如何在 build.sbt ($URL_REPO) 中设置一个变量,并通过为快照或发布分配 url 在 jenkins 作业中指定它的值? 任何帮助是极大的赞赏。 谢谢

【问题讨论】:

    标签: jenkins sbt artifactory


    【解决方案1】:

    要定义存储库,您应该使用publishTo 设置。以下是来自Publishing docs 的示例:

    // in build.sbt
    publishTo := {
      val nexus = "https://my.artifact.repo.net/"
      if (isSnapshot.value)
        Some("snapshots" at nexus + "content/repositories/snapshots")
      else
        Some("releases"  at nexus + "service/local/staging/deploy/maven2")
    }
    

    快照和发布存储库之间的这种切换基于isSnapshot 设置,该设置通常只检查version 设置是否具有-SNAPSHOT 后缀。

    如果这适用于您的用例,这就是要走的路。如果没有,并且您需要根据某些外部因素(例如您如何触发 Jenkins 管道)进行切换,您可以在 Jenkins 中引入一个环境变量并在 publishTo 定义中检查它:

    // in build.sbt
    publishTo := {
      if (sys.env.get("IS_SNAPSHOT").isDefined)
        Some("snapshots" at "...")
      else
        Some("releases"  at "...")
    }
    

    或者如果你想动态设置 URL:

    publishTo := sys.env.get("URL_REPO").map{ url =>
      "publishing repository" at url
    }
    

    【讨论】:

    • 您好,非常感谢您的回答,第三个选项对我来说效果很好!
    猜你喜欢
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多