Bitbucket을 활용하여 GitOps 방식으로 Ansible 프로젝트를 구성하는 것은 코드를 통해 인프라를 관리하는 가장 표준적인 방법입니다. 처음부터 끝까지, 디렉토리 구조를 잡고 AWX와 연결하는 절차를 단계별로 안내해 드릴게요.
가장 먼저 코드를 저장할 공간을 만들고 컴퓨터로 가져와야 합니다.
ansible-gitops-infra)git clone https://bitbucket.org/your-workspace/ansible-gitops-infra.git
cd ansible-gitops-infra이제 AWX가 인식하기 좋은 구조로 폴더를 만듭니다. 터미널에서 한 번에 생성하려면 아래 명령어를 참고하세요.
# 주요 폴더 생성
mkdir -p roles collections playbooks group_vars host_vars
touch ansible.cfg
touch collections/requirements.yml
touch roles/requirements.yml
touch playbooks/site.yml
AWX가 프로젝트를 가져갔을 때 "어떻게 작동해야 할지" 알려주는 가이드라인입니다.
ansible.cfg (Ansible 설정)AWX 내부에서 실행될 때 역할을 찾는 경로 등을 지정합니다.
[defaults]
roles_path = ./roles
collections_path = ./collections
host_key_checking = False
collections/requirements.yml (의존성 관리)클라우드(AWS, Azure 등)나 특정 벤더의 모듈이 필요할 때 정의합니다.
---
collections:
- name: community.general
- name: ansible.posix
playbooks/site.yml (메인 실행 파일)가장 간단한 테스트용 플레이북을 하나 만들어 둡니다.
---
- name: GitOps Connection Test
hosts: all
tasks:
- name: Print Hello Message
debug:
msg: "GitOps is working with Bitbucket!"
작성한 구조를 원격 저장소에 반영합니다.
git add .
git commit -m "Initial Ansible structure for GitOps"
git push origin master
이제 AWX 웹 UI로 이동하여 이 저장소를 바라보게 설정합니다.
Update Revision on Launch 체크 (실행할 때마다 최신 코드를 가져옵니다. GitOps의 핵심!)| 디렉토리/파일 | 역할 | 비고 |
|---|---|---|
playbooks/ | 실제 실행할 .yml 파일들 | AWX Job Template에서 선택할 대상 |
roles/ | 직접 만든 재사용 가능한 역할 | 기능별로 폴더 분리 |
group_vars/ | 서버 그룹별 변수 (DB용, Web용 등) | 인벤토리 그룹명과 파일명 일치 필요 |
requirements.yml | 외부 라이브러리 자동 다운로드 목록 | AWX가 Sync 시 자동 설치 |
ansible.cfg | 프로젝트별 개별 설정값 | 우선순위가 높음 |
이제 Bitbucket의 코드를 수정하고 push만 하면, AWX에서 버튼 클릭 한 번(또는 웹훅 설정 시 자동)으로 변경 사항이 인프라에 반영되는 GitOps 체계가 완성되었습니다.
다음 단계로, Bitbucket에 코드가 푸시될 때 AWX가 자동으로 실행되도록 하는 '웹훅(Webhook)' 연동 방법을 알아볼까요?
===
Bitbucket 리포지토리에 디렉토리 구조를 잡고 AWX 프로젝트와 연결까지 마치셨다면, 이제 실제로 Playbook(YAML)을 AWX에 등록하고 실행하는 단계입니다.
AWX에서는 단순히 파일을 올리는 것이 아니라, 'Job Template(작업 템플릿)'이라는 것을 만들어 실행 환경을 구성해야 합니다. 그 절차를 상세히 안내해 드립니다.
가장 먼저 실행할 YAML 파일을 Bitbucket에 올립니다.
playbooks/ 폴더에 test_playbook.yml 파일을 작성합니다.git add, commit, push를 통해 Bitbucket으로 전송합니다.Bitbucket에 새 파일이 올라갔다는 것을 AWX가 알게 해야 합니다.
Playbook을 실행할 대상 서버(대상체)가 정의되어 있어야 합니다.
이제 "어떤 인벤토리에 어떤 플레이북을 실행할지" 정의하는 템플릿을 만듭니다. 이 과정이 AWX에 Playbook을 등록하는 과정입니다.
Web Server Deploy)Run (실행).yml 파일들이 드롭다운 목록에 나타납니다. 실행할 파일을 선택하세요.만약 Bitbucket에서 Playbook 코드를 수정했다면, 매번 프로젝트 Sync를 누를 필요 없이 템플릿 설정에서 아래 옵션을 체크해 두면 편리합니다.
이제 기본적인 등록과 실행이 가능해졌습니다! 혹시 실행 중에 권한 문제(Permission Denied)나 파일을 찾지 못하는 오류가 발생한다면 말씀해 주세요. 바로 해결책을 찾아드리겠습니다.