2016-07-10 19 views
1

Ich habe ein privates Projekt in Gitlab erstellt und ich versuche, ein einfaches Deployment-Skript aufzuschreiben, um das Projekt nach dem Herunterladen aus dem Repository zu starten, und ich bin Verwenden von Ubuntus Bash-Umgebung zum Ausführen des Skripts.Wie ein privates Projekt von Gitlab mit privaten Schlüsseln herunterladen

curl -fSL "https://gitlab.com/MyUsername/MyProject/repository/archive.zip?ref=master" -o project.zip 

Es gibt answers es zeigt, wie das gleiche für ein privates Projekt zu tun Gitlab Benutzername + Passwort oder private_token verwenden und:

Ich habe das gleiche mit einem öffentlichen Projekt mit einem einfachen curl Kommando der Curl-Befehl. Aber ich bevorzuge die "Deploy Keys" -Features, die mit Gitlab bereitgestellt werden. Bisher habe ich getan, wie es durch Gitlab's documentation angewiesen wird:

ssh-keygen -t rsa -C "$your_email" 

Und dann den öffentlichen Schlüssel Datei hochladen Schlüssel meines Projekts in Gitlab einzusetzen. Meine Frage ist: Wie kann ich den privaten Schlüssel verwenden, mit dem ich die neueste Version meines Projekts herunterladen kann? Sollte ich curl oder scp oder etwas anderes verwenden? Geben Sie auch Beispiele für den Zeitpunkt an, zu dem das Projekt einer Gruppe angehört.

Antwort

2

Private SSH-Schlüssel können nicht für HTTPS-Verbindungen verwendet werden. Daher müssen Sie Dienste verwenden, die über SSH verfügbar sind. In diesem Fall bedeutet das eine git clone (oder, idealerweise, wenn Sie einen vorhandenen Klon haben, eine git fetch, um es inkrementell zu aktualisieren), gefolgt von einer git archive.

#!/bin/bash 
#  ^^^^-- /bin/bash, not /bin/sh, or the [[ ]] syntax isn't guaranteed to work 

# change or parameterize these 
[email protected]:group/repo.git 
repo_dir=/path/to/local-dir 
output_path=/path/to/archive.zip 

if [[ -d $repo_dir ]]; then 
    (cd "$repo_dir" && exec git fetch) || exit 
else 
    git clone "$repo_path" "$repo_dir" || exit 
fi 

# and to create the archive 
cd "$repo_dir" && git archive --format=zip -o "$output_path" origin/master 

Sobald Sie den ersten Klon erstellt haben, ein git fetch tun und eine lokales git archive ist eigentlich mehr Bandbreite effizienter als die gesamte Zip-Datei herunterzuladen, da es nur die Änderungen seit der letzten Aktualisierung zieht.


Wenn Sie Ihr privater Schlüssel als ~/.ssh/id_rsa gespeichert wird, wird es automatisch verwendet. Andernfalls möchten Sie einen ~/.ssh/config Dateieintrag wie folgt erstellen:

Host gitlabhost.com # substituting the real hostname 
    User git # use the username "git" connecting to this host by default 
    IdentityFile /path/to/your/id_rsa # if not in the default location 
+0

Danke, aber wo ist der private Schlüssel verwendet? – Mehran

+0

Wenn Sie es als '~/.ssh/id_rsa' gespeichert haben, wird es automatisch von' git clone' und 'git fetch' verwendet, wenn sie mit einem Server über SSH (oder besser gesagt vom OpenSSH-Client, wenn es läuft) kommunizieren 'git'). Andernfalls können Sie einen '~/.ssh/config'-Eintrag erstellen, der' gitlabhost.com' angibt, um einen bestimmten Schlüssel zu berücksichtigen, und diese Befehle berücksichtigen diese Konfigurationsdatei automatisch. –

+0

... Ich habe bearbeitet, um ein explizites Beispiel eines '~/.ssh/config'-Dateieintrags anzuzeigen, der eine nicht standardmäßige 'id_rsa'-Datei angibt. –