我想在使用built.sbt时使用环境变量来传递我的repo凭据。
我尝试过这样的事情,但细节还没有找到。
credentials += Credentials("Some Nexus Repository Manager", "my.artifact.repo.net", System.getenv("USERNAME"), System.getenv("PASSWORD"))
我还尝试了〜/ .sbt /下的凭证文件,但我不知道如何添加环境变量。
如果我只是在凭证文件中正常输入我的用户名和密码,那么我就知道登录的详细信息是正常的。
其他: 我在运行sbt compile之前在shell中获取环境变量。
正在运行
credentials += Credentials("Realm", "my.artifact.repo.net", sys.env("USERNAME"), sys.env("PASSWORD"))
导致禁止的网址错误。
我应该说我试图解决依赖关系
更新: 以下内容返回正确的值
eval scala.sys.env("ARTIFACTORY_USERNAME")
但是当我将其添加到我的脚本中时
val username = scala.sys.env("ARTIFACTORY_USERNAME")
val password = scala.sys.env("ARTIFACTORY_PASSWORD")
credentials += Credentials("Artifactory Realm", "artifactory.link.io", username, password)
resolvers ++= Seq(
"Artifactory Snapshot" at "https://artifactory.link.io/art/libs-snapshot"
)
或
credentials += Credentials("Artifactory Realm", "my.artifact.repo.net", sys.env("ARTIFACTORY_USERNAME"), sys.env("ARTIFACTORY_PASSWORD"))
我收到一个FORBIDDEN URL错误,表明scala部分运行正常,但由于某种原因,凭据仍然不正确。如果我在build.sbt中明确设置了凭据,那就可以了。
答案 0 :(得分:8)
您可以使用其他响应中提到的命令获取env变量,例如:
sys.env.get("USERNAME")
sys.env.get("PASSWORD")
但它们会返回Option [String]
类型的选项要将其转换为字符串,您需要进行匹配或只需使用
sys.env.get("USERNAME").get
sys.env.get("USERNAME").getOrElse("some default value")
如果您需要设置一些默认值。警告!调用没有值的选项的.get会给你一个运行时错误。
答案 1 :(得分:7)
您可以在sbt中使用在Scala中有效的任何内容,例如:
sys.env.get("PASSWORD")
答案 2 :(得分:2)
将代码添加到示例中,发送用户ID和密码的凭据字符串:
(sys.env.get("USERNAME"), sys.env.get("PASSWORD")) match {
case (Some(username), Some(password)) =>
println(s"Do my thing $username/$password")
credentials += Credentials("Realm", "my.artifact.repo.net", username, password)
case _ =>
println("USERNAME and/or PASSWORD is missing")
credentials ++= Seq()
}
答案 3 :(得分:1)
通过sys.env("VARIABLE")
或System.getenv("VARIABLE")
获取环境变量,如果正确导出,则都可以在build.sbt中使用。
您可能需要正确设置凭据(general instructions)。
对于Artifactory,它应该如下所示:
publishTo := Some("Artifactory Realm" at "http://<host>:<port>/artifactory/<repo-key>")
credentials += Credentials("Artifactory Realm", "<host>", "<USERNAME>", "<PASS>")
请注意,此处的“Artifactory Realm”不是任意字符串,实际上必须完全符合规定。
完整说明:https://www.jfrog.com/confluence/display/RTF/SBT+Repositories
答案 4 :(得分:1)
您也可以使用
val config :Config = ConfigFactory.load()
val username=config.getString(“USERNAME”)
val password = config.getString(“PASSWORD”)
答案 5 :(得分:0)
(sys.env.get("USERNAME"), sys.env.get("PASSWORD")) match ...
不适用于sbt 1.1.1。
JFrog的替代解决方案,这是github上的可行示例
https://github.com/jfrog/project-examples/tree/master/circleci-example/circleci-sbt-artifactory
在项目的根目录而不是credentials.properties
上创建一个~/.sbt/credentials
文件。将其添加到.gitignore
。
cat <<EOF > credentials.properties
realm=Artifactory Realm
host=gcartifactory-us.jfrog.info
user=$ARTIFACTORY_USERNAME
password=$ARTIFACTORY_PASSWORD
EOF
在生成之前生成文件,并在您的文件中对其进行引用
build.sbt
credentials += Credentials(new File("credentials.properties"))