web-dev-qa-db-fra.com

Comment utiliser les variables d'environnement dans build.sbt?

J'aimerais utiliser des variables d'environnement pour transmettre mes informations d'identification de prise en pension lors de l'utilisation de built.sbt. 

J'ai essayé des choses comme ça mais les détails ne sont pas repris.

credentials += Credentials("Some Nexus Repository Manager", "my.artifact.repo.net", System.getenv("USERNAME"), System.getenv("PASSWORD"))

J'ai également essayé un fichier d'identification sous ~/.sbt/mais je ne sais pas comment ajouter des variables d'environnement à cela.

Si je tape simplement mon nom d’utilisateur et mon mot de passe normalement dans le fichier d’identifiants, cela fonctionne, donc je sais que les informations de connexion sont correctes.

Supplémentaire: Je source les vars d’environnement dans un shell avant de lancer sbt compile. 

Fonctionnement 

credentials += Credentials("Realm", "my.artifact.repo.net", sys.env("USERNAME"), sys.env("PASSWORD"))

entraîne une erreur d'URL interdite.

Je devrais dire que je suis coincé en essayant de résoudre les dépendances

UPDATE: Le suivant renvoie la valeur correcte

eval scala.sys.env("ARTIFACTORY_USERNAME")

Mais quand j'ajoute cela dans mon script

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"
)

ou 

credentials += Credentials("Artifactory Realm", "my.artifact.repo.net", sys.env("ARTIFACTORY_USERNAME"), sys.env("ARTIFACTORY_PASSWORD"))   

Je reçois une erreur URL INTERDITE qui suggère que la partie scala fonctionne correctement, mais pour une raison quelconque, les informations d'identification sont toujours incorrectes. Si je définis explicitement les informations d'identification dans le build.sbt, cela fonctionne.

12
Glef

Vous pouvez obtenir des variables env avec les commandes mentionnées, telles que: 

sys.env.get("USERNAME")
sys.env.get("PASSWORD")

mais ils renvoient une option de type Option [String]

Pour transformer cela en chaîne, vous devez soit faire une correspondance, soit simplement utiliser

sys.env.get("USERNAME").get
sys.env.get("USERNAME").getOrElse("some default value")

si vous devez définir une valeur par défaut. Attention! appeler .get d'une option qui n'a pas de valeur vous donnera une erreur d'exécution.

7
Pietari Kettunen

Vous pouvez utiliser tout ce qui fonctionne dans Scala in sbt, par exemple:

sys.env.get("PASSWORD")
7
OlivierBlanvillain

Ajout de votre code à l'exemple, envoi de chaînes d'identification pour l'identifiant et le mot de passe:

(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()
}
2
Don Branson

Vous pouvez aussi utiliser 

val config :Config = ConfigFactory.load()
val username=config.getString(“USERNAME”)
val password = config.getString(“PASSWORD”)
1
Raman Mishra

Obtenir les variables d'environnement via sys.env("VARIABLE") ou System.getenv("VARIABLE") fonctionnera dans build.sbt si elles sont correctement exportées.

Vous devrez peut-être configurer vos informations d'identification correctement ( instructions générales ).

Pour Artifactory, cela devrait ressembler à ceci:

publishTo := Some("Artifactory Realm" at "http://<Host>:<port>/artifactory/<repo-key>")
credentials += Credentials("Artifactory Realm", "<Host>", "<USERNAME>", "<PASS>")

Notez que "Artifactory Realm" n'est pas une chaîne arbitraire et doit correspondre exactement à ce qui est indiqué.

Instructions complètes: https://www.jfrog.com/confluence/display/RTF/SBT+Repositories

1
Justin Kaeser

(sys.env.get("USERNAME"), sys.env.get("PASSWORD")) match ... ne fonctionnait pas avec sbt 1.1.1.

Solution alternative de JFrog, voici un exemple de travail sur github

https://github.com/jfrog/project-examples/tree/master/circleci-example/circleci-sbt-artifactory

Créez un fichier credentials.properties à la racine de votre projet au lieu de ~/.sbt/credentials. Ajoutez-le à .gitignore.

cat <<EOF > credentials.properties
realm=Artifactory Realm
Host=gcartifactory-us.jfrog.info
user=$ARTIFACTORY_USERNAME
password=$ARTIFACTORY_PASSWORD
EOF

Générez le fichier avant la compilation et faites-en référence dans votre build.sbt

credentials += Credentials(new File("credentials.properties"))
0
Michel Hua