如何使用Ansible将代码从本地git存储库部署到远程服务器

时间:2019-04-02 10:17:27

标签: git ansible

我正在使用Ansible 2.5。我需要将代码从本地(controller)git存储库部署到远程服务器。

我正在尝试使用带有git模块的Ansible-playbook,该模块只能将代码从本地存储库部署到另一个本地路径,或者将远程存储库部署到另一个远程路径。它基于主机配置。

- git:
    repo: /home/pi/Desktop/kk/Vue-Example/
    dest: /home/pi/Desktop/bb

这里repo将是本地(控制器计算机)git存储库路径 并且dest将是远程计算机位置。

2 个答案:

答案 0 :(得分:1)

这正是我想要的工作流程-从我知道可以依赖的本地git repo中提取文件。就我而言,我使用的是特定的提交ID(经过良好测试的版本),而不是分支名称。如果需要,只需将下面的“ master”替换为提交ID。

- name: Make temp directory
  tempfile:
    state: directory
  register: temp_git_archive
  delegate_to: localhost
  become: no
  changed_when: False
- name: Extract latest git commit on branch master
  shell: git archive master |tar --extract --directory={{ temp_git_archive.path }}
  args:
    chdir: /home/pi/Desktop/kk/Vue-Example/  # YOUR LOCAL GIT REPO
  delegate_to: localhost
  become: no
  changed_when: False
- name: Copy to remote
  copy:
    src: "{{ temp_git_archive.path }}"
    dest: /home/pi/Desktop/bb  # YOUR DESTINATION DIRECTORY
- name: Delete temp directory
  file:
    path: "{{ temp_git_archive.path }}"
    state: absent
  when: temp_git_archive.path is defined
  delegate_to: localhost
  become: no
  changed_when: False

也许可以使用Ansible的“ git”和“ unarchive”模块代替上面的“ shell”模块,但我更喜欢一步完成。

答案 1 :(得分:0)

您错误地解释了使用ansible的git模块。它用于在目标路径(即控制器计算机或远程主机)中克隆远程仓库。您指定了git模块不存在的本地路径,因为git会尝试发送http / ssh请求,而该路径不存在。

ansible回购值的报价是

  

回购:git存储库的git,SSH或HTTP(S)协议地址。

如果您要在控制器计算机上克隆是ssh键,则可以使用git模块委托给localhost,然后使用复制模块从控制器复制到远程计算机

---
- name: play to checkout
  hosts: remote-hosts
  tasks:
    - name: git checkout
      repo: "{{ repo_url }}"
      dest: /tmp
      delegate_to: localhost
    - name: copy module
      synchronize:
        src: ...
        dest: ...