我正在使用Ansible 2.5。我需要将代码从本地(controller)git存储库部署到远程服务器。
我正在尝试使用带有git模块的Ansible-playbook,该模块只能将代码从本地存储库部署到另一个本地路径,或者将远程存储库部署到另一个远程路径。它基于主机配置。
- git:
repo: /home/pi/Desktop/kk/Vue-Example/
dest: /home/pi/Desktop/bb
这里repo
将是本地(控制器计算机)git存储库路径
并且dest
将是远程计算机位置。
答案 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: ...