Client-Tools für Paketformate konfigurieren
Wie du Maven, Gradle, pip, Docker und npm gegen Craftifact konfigurierst, inklusive Kontextpfad, Repository-Name und Token-Authentifizierung.
Kurzpfad
- Bestimme die öffentliche Basis-URL deiner Instanz, zum Beispiel
https://packages.example.com. - Bestimme den Repository-Namen, den du ansprechen willst, zum Beispiel
libs-release. - Erzeuge einen passenden User- oder Robot-Token.
- Setze im jeweiligen Client die richtige Repository-URL aus Kontextpfad und Repository-Namen zusammen.
- Hinterlege den Token je nach Client als Bearer-Token oder als Passwort für Basic Auth.
Snippets anpassen
Trage hier deine Instanz und den Repository-Namen ein. Die Snippets unten auf der Seite werden automatisch darauf angepasst.
Beispiel: packages.example.com
Beispiel: libs-release
https://packages.example.com
Repo: libs-release
Grundmuster für Repository-URLs
In Craftifact setzt sich die URL immer aus Basis-URL, Kontextpfad und Repository-Name zusammen.
Für die aktuell unterstützten Familien sind die Basismuster:
- Maven:
https://<instanz>/repository/maven/<repo-name>/ - Gradle:
https://<instanz>/repository/maven/<repo-name>/ - Python:
https://<instanz>/repository/python/<repo-name>/simple/ - npm:
https://<instanz>/repository/npm/<repo-name>/ - OCI:
https://<instanz>/v2/<repo-name>/... - Go beta: Details folgen noch.
Für Docker-Kommandos schreibst du den Kontextpfad v2 normalerweise nicht selbst aus.
Der Client verwendet ihn intern, während du im Image-Namen mit Host, Repository-Name und Image-Pfad arbeitest.
Der Konfigurator oben setzt automatisch:
- Basis-URL wie
https://packages.example.com - Instanz-Host wie
packages.example.com - Repository-Name wie
libs-release
Als Platzhalter bleiben in den Snippets nur noch:
TOKENals erzeugter API- oder Robot-TokenROBOT_IDwieacceptance-test
Maven und Gradle
Für Maven und Gradle nutzt du denselben Repository-Kontextpfad:
https://packages.example.com/repository/maven/libs-release/
Ein einfaches settings.xml-Beispiel mit Bearer-Token sieht so aus:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>craftifact</id>
<configuration>
<httpHeaders>
<property>
<name>Authorization</name>
<value>Bearer ${env.CRAFTIFACT_TOKEN}</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>
Beim Deploy kannst du das Repository dann zum Beispiel so ansprechen:
mvn deploy \
-s settings.xml \
-DaltDeploymentRepository=craftifact::https://packages.example.com/repository/maven/libs-release/
Ein Beispiel für build.gradle mit Bearer-Token im HTTP-Header:
repositories {
maven {
url = uri("https://packages.example.com/repository/maven/libs-release/")
credentials(HttpHeaderCredentials) {
name = "Authorization"
value = "Bearer ${System.getenv('CRAFTIFACT_TOKEN')}"
}
authentication {
header(HttpHeaderAuthentication)
}
}
}
Für Publishing funktioniert dasselbe Muster in publishing.repositories:
publishing {
repositories {
maven {
url = uri("https://packages.example.com/repository/maven/libs-release/")
credentials(HttpHeaderCredentials) {
name = "Authorization"
value = "Bearer ${System.getenv('CRAFTIFACT_TOKEN')}"
}
authentication {
header(HttpHeaderAuthentication)
}
}
}
}
pip und Poetry
Für Python-Clients ist die Simple-Index-URL:
https://packages.example.com/repository/python/libs-release/simple/
Ein Beispiel für pip.conf mit Basic Auth:
[global]
index-url = https://ROBOT_ID:TOKEN@packages.example.com/repository/python/libs-release/simple/
Wenn du lieber den Platzhalter __token__ statt der Robot-ID verwenden willst, funktioniert auch das:
https://__token__:TOKEN@packages.example.com/repository/python/libs-release/simple/
Die Robot-ID ist aber lesbarer, weil später direkt erkennbar bleibt, zu welchem Robot-Account der Token gehört.
Für Installationen kannst du eine Source mit derselben Simple-Index-URL hinterlegen:
poetry source add --priority=primary craftifact \
https://packages.example.com/repository/python/libs-release/simple/
Die Zugangsdaten setzt du danach separat:
poetry config http-basic.craftifact ROBOT_ID TOKEN
Für Publishing hinterlegst du zusätzlich die Upload-URL ohne simple/:
poetry config repositories.craftifact \
https://packages.example.com/repository/python/libs-release/
poetry publish --build --repository craftifact
Auch hier kannst du statt ROBOT_ID technisch __token__ verwenden. Die Robot-ID bleibt aber die besser lesbare Wahl.
Docker
Bei OCI ist der technische Kontextpfad immer v2, aber Docker verwendet ihn intern.
Für den Login meldest du dich am Registry-Host an, nicht an einer expliziten /v2/-URL.
printf '%s' "$TOKEN" | docker login packages.example.com -u ROBOT_ID --password-stdin
Ein Image adressierst du dann über Host, Repository-Name und Image-Pfad:
packages.example.com/libs-release/IMAGE_PATH:TAG
Beispiel:
docker pull packages.example.com/libs-release/demo/app:1.0.0
docker push packages.example.com/libs-release/demo/app:1.0.0
Dabei gilt intern:
- der Host ist
packages.example.com - der Repository-Name ist
libs-oci - der Image-Pfad ist
demo/app - der Client spricht darunter automatisch die API unter
/v2/an
npm
Für npm ist die Registry-URL:
https://packages.example.com/repository/npm/libs-release/
Ein minimales .npmrc-Beispiel:
registry=https://packages.example.com/repository/npm/libs-release/
always-auth=true
//packages.example.com/repository/npm/libs-release/:_authToken=TOKEN
Wenn du scoped Packages nutzt, bleibt die Basis-URL gleich.
Nur der Paketname selbst wird später entsprechend mit Scope verwendet, zum Beispiel @acme/demo.
Praktische Hinweise
- Nicht jeder Client kann Bearer- und Basic-Auth gleich flexibel ausdrücken. Nutze deshalb die Form, die zum Tool passt.
- Für Docker ist der Login auf Host-Ebene normal, obwohl die Registry intern unter
v2arbeitet. - Für Python-Installationen ist
simple/Teil der URL und darf nicht weggelassen werden. - Für Poetry-Publishing nutzt du dagegen die Repository-URL ohne
simple/.
Verwandte Seiten
- Für SBOM-spezifische Workflows mit Maven, Gradle, Poetry, npm und OCI siehe SBOMs mit Client-Tools erzeugen.
- Für Token-Erzeugung und die Unterschiede zwischen Bearer- und Basic-Auth siehe Robot-Account anlegen und Token nutzen.
- Für allgemeine Paketformat-Regeln siehe Hinweise zu Paketformaten.