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.
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.
Vous pouvez utiliser tout ce qui fonctionne dans Scala in sbt, par exemple:
sys.env.get("PASSWORD")
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()
}
Vous pouvez aussi utiliser
val config :Config = ConfigFactory.load()
val username=config.getString(“USERNAME”)
val password = config.getString(“PASSWORD”)
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
(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"))