Wie eine gesicherte Nexus mit sbt zugreifen?
Frage
Ich versuche, einen Nexus-Repository-Manager zuzugreifen, das einige grundlegende Authentifizierung erfordert. Alles funktioniert gut aus Maven2 aber wenn ich zu konfigurieren Dinge in SBT versuchen kann es nicht die Artefakte finden. Es wird mit einem benutzerdefinierten Repository-Muster (siehe ), aber ich glaube nicht, dass Materie sollte. In jedem Fall ist die entsprechende Konfiguration hier.
Project.scala:
val snapshotsName = "Repository Snapshots"
val snapshotsUrl = new java.net.URL("http://nexusHostIp:8081/nexus/content/repositories/snapshots")
val snapshotsPattern = "[organisation]/[module]/[revision]-SNAPSHOT/[artifact]-[revision](-[timestamp]).[ext]"
val snapshots = Resolver.url(snapshotsName, snapshotsUrl)(Patterns(snapshotsPattern))
Credentials(Path.userHome / ".ivy2" / ".credentials", log)
val dep = "group" % "artifact" % "0.0.1" extra("timestamp" -> "20101202.195418-3")
~ / .ivy2 / .credentials:
realm=Snapshots Nexus
host=nexusHostIp:8081
user=nexususername
password=nexuspassword
Nach einer ähnlichen Diskussion in der Benutzergruppe SBT dies sollte gut funktionieren, aber ich erhalte die folgende, wenn ich zu bauen versuchen.
==== Repository Snapshots: tried
[warn] -- artifact group#artifact;0.0.1!artifact.jar:
[warn] http://nexusHostIp:8081/nexus/content/repositories/snapshots/group/artifact/0.0.1-SNAPSHOT/artifact-0.0.1-20101202.195418-3.jar
Ich bin ziemlich sicher, dass dies ein Problem ist, Anmeldeinformationen und nicht etwas anderes, weil ich die URL treffen kann es sagt, dass es versucht, das Glas direkt und downloaden (nach der Authentifizierung).
Ich habe versucht, auch inline die Anmeldeinformationen zu erklären (obwohl es weniger als ideal ist) wie folgt:
Credentials.add("Repository Snapshots", "nexusHostIp", "nexususername", "nexuspassword")
Lösung
Hier ist, was ich getan habe (sbt 0,13 + artifactory - Setup sollte für Nexus ähnlich sein):
1) Edited die Datei ~ / .sbt / Repositories wie hier angegeben: http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Proxy-Repositories.html
[repositories]
local
my-ivy-proxy-releases: http://repo.company.com/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
my-maven-proxy-releases: http://repo.company.com/maven-releases/
2) mein artifactory zu deaktivieren den anonymen Zugriff gesperrt.
3) Erstellt eine Credentials-Datei in ~ / .sbt / .credentials
realm=Artifactory Realm
host=artifactory.mycompany.com
user=username
password=password
4) eine Datei unter ~ / .sbt / 0,13 / plugins / credentials.sbt dass Drähte auf die Standardanmeldeinformationen
Erstelltcredentials += Credentials(Path.userHome / ".sbt" / ".credentials")
Nun, wenn mein Projekt Lasten sbt Treffer Artifactory wie normal.
Der Grund, warum ich es so tat, ist die Repository-Definitionen zu halten, usw., aus den Projektdateien Teams zu ermöglichen Flexibilität haben (sie können einen internen Server einrichten in-progress-Artefakte zu dienen, etc).
-Austen
Andere Tipps
UPDATE:. Diese Antwort Arbeit nicht in der letzten sbt Versionen - siehe Austens Antwort statt
In Ordnung Ich habe endlich diese aussortiert werden.
snapshotsName
kann alles sein. realm
in .credentials muss der HTTP-Authentifizierung Reich sein, dass zeigt sich beim Versuch, die URL des Repositorys (nexus in meinem Fall) zu treffen. realm
ist auch der erste Parameter von Credentials.add
. So daß die Leitung hätte sein sollen
Credentials.add("Sonatype Nexus Repository Manager", "nexusHostIp", "nexususername", "nexuspassword")
Der Hostname ist nur die IP-Adresse oder den DNS-Namen. So in .credentials host
ist nur nexusHostIp
ohne die Portnummer ein.
So ist die Arbeitsprojektkonfiguration ist:
val snapshotsName = "Repository Snapshots"
val snapshotsUrl = new java.net.URL("http://nexusHostIp:8081/nexus/content/repositories/snapshots")
val snapshotsPattern = "[organisation]/[module]/[revision]-SNAPSHOT/[artifact]-[revision](-[timestamp]).[ext]"
val snapshots = Resolver.url(snapshotsName, snapshotsUrl)(Patterns(snapshotsPattern))
Credentials(Path.userHome / ".ivy2" / ".credentials", log)
val dep = "group" % "artifact" % "0.0.1" extra("timestamp" -> "20101202.195418-3")
Mit einer .credentials Datei, das aussieht wie:
realm=Sonatype Nexus Repository Manager
host=nexusHostIp
user=nexususername
password=nexuspassword
Wo "Sonatype Nexus Repository Manager" ist der HTTP-Authentifizierungsbereich.
Wenn SBT Launcher ausfällt von Ihrem Proxy eine neue Version von SBT zum Download, und dass ~/.sbt/boot/update.log
zeigt, dass Sie bekommen 401 Authentifizierungsfehler, können Sie die Umgebungsvariable SBT_CREDENTIALS verwenden, um festzulegen, wo die Efeu Credential-Datei.
Jede dieser soll die neue sbt Version arbeiten und heruntergeladen werden:
-
SBT_CREDENTIALS='/home/YOUR_USER_NAME/.ivy2/.credentials' sbt
- Putting
export SBT_CREDENTIALS="/home/YOUR_USER_NAME/.ivy2/.credentials"
in Ihrem.bashrc
(oder.zshrc
), eine neue Shell-Sitzung starten und führen Sie dannsbt
(Sie finden die Datei
~/.ivy2/.credentials
Setup wie andere Antworten hier hat gezeigt zu haben braucht)
Quelle: https://github.com/sbt/sbt/commit/96e5a7957c830430f85b6b89d7bbe07824ebfc4b
Nach der SBT-Dokumentation über :
Es gibt zwei Möglichkeiten, die Anmeldeinformationen für ein solches Repository angeben:
Inline
credentials += Credentials("Some Nexus Repository Manager", "my.artifact.repo.net", "admin", "password123")
Externe Datei
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
Die Credentials-Datei ist eine Properties-Datei mit den Tasten Bereich, Host, Benutzer und Passwort ein. Zum Beispiel:
realm=Some Nexus Repository Manager
host=my.artifact.repo.net
user=admin
password=password123
Das ist für mich gearbeitet. Ich verwende SBT Version 0.13.15:
~/.ivy2/.my-credentials
(Host ohne Port):
realm=Sonatype Nexus Repository Manager
host=mynexus.mycompany.com
user=my_user
password=my_password
build.sbt
(nexus URL mit Port):
import sbt.Credentials
...
credentials += Credentials(Path.userHome / ".ivy2" / ".my-credentials")
...
resolvers in ThisBuild ++= Seq(
MavenRepository("my-company-nexus", "https://mynexus.mycompany.com:8081/repository/maven-releases/")
)
Überprüfen Sie, ob alle Dateien mit Anmeldeinformationen.
Für mich hatte ich ein neues Projekt in sbt 1.0 (statt der guten alten 0.13), wo ich eine ~/.sbt/1.0/global.sbt
Datei hatte meine Anmeldeinformationen enthalten, die ich vergessen habe. So nach einer obligatorischen Kennwortänderung wurde die artifactory Downloads gebrochen und mein Konto sperren.
Wäre schön, wenn die Kette von Berechtigungsnachweisen und Dateien, um sie füllen kann leicht überprüft werden. Wäre auch schön, wenn SBT etwas vorsichtiger und erste Überprüfung ist, wenn die Authentifizierung / Autorisierung korrekt ist, bevor tot Download X-Dateien starten und Sperren meines Kontos nach 3 misauthenticated Versuchen.