Это двойной вопрос.
В сценариях, когда репозиторий git не является общедоступным, могу ли я выполнить развертывание с локальной машины (на которой также запущен Ansible) на удаленном хосте, используя локальную копию репозитория на моем жестком диске (или копию на главном сервере, например)?
Если ответ на предыдущий вопрос «да», используется ли для этой цели модуль git?
РЕДАКТИРОВАТЬ:
Что я уже попробовал:
Структура dir выглядит следующим образом:
repo/
|-.git/
|-deploy/
| |-inventory
| |-roles/
| | \-app/
| | \-main.yml
| \-vagrant.yml
\-src/
В сборник входят:
- name: Clone local application
git: repo={{ inventory_dir }}/../
dest=/home/{{ application_name }}/code
Развертывание этого на Vagrant-ящике через SSH приводит к следующему:
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.",
...}
решение1
git
Модуль Ansible использует собственный git
исполняемый файл для выполнения своих действий, поэтому вам нужно действовать так же, как и при ручных операциях.
Смонтируйте диск, содержащий репозиторий Git, на целевой машине.
Это легко достижимо с помощью Vagrant, если вы сохраните репозиторий в каталоге, содержащем
Vagrantfile
(это может отличаться от вашего сценария — не совсем понимаю, что вы имеете в видуvagrant.yml
).Vagrant по умолчанию монтирует этот каталог в
/vagrant
виртуальной машине, поэтому для клонирования репозитория вам нужно будет использовать стандартныйgit
модуль:- git: repo: /vagrant/path/to/source/repository dest: /path/to/destination
Он клонирует репозиторий в
/path/to/destination/repository
.Использовать Ansible
synchronize
модульдля отправки репозитория на целевую машину. Если единственной причиной клонирования является «развертывание приложения» без отправки обратно в исходный репозиторий, этого достаточно.Наконец, вы можете предоставить общий доступ к репозиторию, используя любой из протоколов, поддерживаемых Git, например, SSH, HTTP, HTTPS, FTP, FTPS, rsync; или смонтировать каталог с помощью NFS (это эквивалентно первому методу).