이것은 두 가지 질문입니다.
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
Ansible git
모듈은 기본 git
실행 파일을 사용하여 작업을 수행하므로 수동 작업과 마찬가지로 진행해야 합니다.
Git 저장소가 포함된 디스크를 대상 머신에 마운트합니다.
이는 Vagrant를 사용하여 쉽게 달성할 수 있습니다. 저장소를 다음이 포함된 디렉터리 아래에 유지하면 됩니다
Vagrantfile
(이는 시나리오와 다를 수 있습니다. 가 무엇을 의미하는지 잘 모르겠습니다vagrant.yml
).Vagrant는 기본적으로
/vagrant
가상 머신에 이 디렉터리를 마운트하므로 저장소를 복제하려면 표준 모듈을 사용합니다git
.- git: repo: /vagrant/path/to/source/repository dest: /path/to/destination
저장소를
/path/to/destination/repository
.앤서블 사용
synchronize
기준 치수저장소를 대상 머신에 푸시합니다. 복제의 유일한 이유가 원래 저장소로 푸시하지 않고 "애플리케이션 배포"라면 충분합니다.마지막으로 SSH, HTTP, HTTPS, FTP, FTPS, rsync와 같이 Git에서 지원하는 프로토콜 중 하나를 사용하여 리포지토리를 공유할 수 있습니다. 또는 NFS로 디렉토리를 마운트하십시오(이것은 첫 번째 방법과 동일합니다).