从本地 git 存储库部署应用程序

从本地 git 存储库部署应用程序

这是一个双重问题。

在 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

  • 使用 Ansiblesynchronize模块将存储库推送到目标计算机。如果克隆的唯一原因是“部署应用程序”而不是推送回原始存储库,那么这就足够了。

  • 最后,您可以使用 Git 支持的任一协议(如 SSH、HTTP、HTTPS、FTP、FTPS、rsync)共享存储库;或者使用 NFS 挂载目录(这相当于第一种方法)。

相关内容