这是一个双重问题。
在 git 存储库不可公开访问的情况下,我可以使用硬盘上的存储库的本地副本(或主服务器上的副本)从本地计算机(也运行 Ansible)部署到远程主机吗?
如果上一个问题的答案是肯定的,那么 git 模块是否用于此目的?
编辑:
到目前为止我已经尝试过:
目录结构如下:
repo/
|-.git/
|-deploy/
| |-inventory
| |-roles/
| | \-app/
| | \-main.yml
| \-vagrant.yml
\-src/
剧本包含:
- name: Clone local application
git: repo={{ inventory_dir }}/../
dest=/home/{{ application_name }}/code
通过 SSH 将其部署到 vagrant box 会导致:
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
Ansiblegit
模块使用本机git
可执行文件来执行其操作,因此您需要像手动操作一样进行操作。
将包含 Git 存储库的磁盘挂载到目标机器。
如果您将存储库保存在包含的目录下
Vagrantfile
(这可能与您的情况不同 - 不确定您的意思vagrant.yml
),则可以使用 Vagrant 轻松实现这一点。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 挂载目录(这相当于第一种方法)。