Dies ist eine Frage mit zwei Aspekten.
Kann ich in Szenarien, in denen das Git-Repository nicht öffentlich zugänglich ist, von einem lokalen Computer (auf dem auch Ansible ausgeführt wird) auf einem Remote-Host bereitstellen, indem ich die lokale Kopie des Repositorys auf meiner Festplatte (oder beispielsweise eine Kopie auf dem Master-Server) verwende?
Wenn die Antwort auf die vorherige Frage „Ja“ lautet: Wird das Git-Modul für diesen Zweck verwendet?
BEARBEITEN:
Was ich bisher versucht habe:
Die Verzeichnisstruktur ist wie folgt:
repo/
|-.git/
|-deploy/
| |-inventory
| |-roles/
| | \-app/
| | \-main.yml
| \-vagrant.yml
\-src/
Das Spielbuch enthält:
- name: Clone local application
git: repo={{ inventory_dir }}/../
dest=/home/{{ application_name }}/code
Das Bereitstellen auf einer Vagrant-Box über SSH führt zu:
fatal: [vagrant]: FAILED! => {
"changed": false,
"cmd": "/usr/bin/git clone --origin origin path/to/repo",
"failed": true,
"msg": "Cloning into '/home/app/code'...\nfatal:
'path/to/repo' does not appear to be a git repository\nfatal:
Could not read from remote repository.\n\nPlease make sure you
have the correct access rights\nand the repository exists.",
...}
Antwort1
Das Ansible- git
Modul verwendet zur Ausführung seiner Aktionen native git
ausführbare Dateien. Sie müssen daher wie bei manuellen Vorgängen vorgehen.
Mounten Sie die Festplatte mit dem Git-Repository auf dem Zielcomputer.
Dies lässt sich mit Vagrant problemlos erreichen, wenn Sie das Repository in dem Verzeichnis aufbewahren, das enthält
Vagrantfile
(dies kann in Ihrem Szenario anders sein – ich bin nicht sicher, was Sie damit meinenvagrant.yml
).Vagrant mountet dieses Verzeichnis standardmäßig in
/vagrant
der virtuellen Maschine. Um ein Repository zu klonen, verwenden Sie daher das Standardmodulgit
:- git: repo: /vagrant/path/to/source/repository dest: /path/to/destination
Das Repository wird nach geklont
/path/to/destination/repository
.Ansible verwenden
synchronize
Modulum das Repository auf den Zielcomputer zu übertragen. Wenn der einzige Grund für das Klonen darin besteht, die Anwendung bereitzustellen, ohne sie zurück in das ursprüngliche Repository zu übertragen, ist dies ausreichend.Schließlich können Sie das Repository mit einem der von Git unterstützten Protokolle wie SSH, HTTP, HTTPS, FTP, FTPS, rsync freigeben oder das Verzeichnis mit NFS mounten (dies entspricht der ersten Methode).