728x90
반응형
- Slack/Email 기반 모니터링/알림 연동
- dev/stage/prod 분리 기반의 다중 환경 자동화 배포 구조
- Molecule 기반의 자동화 테스트 체계 구축
🔔 1. 알림 연동 (Slack / Email / Teams)
📁 구조
callback_plugins/
├── slack_notify.py
ansible.cfg
📄 slack_notify.py
from ansible.plugins.callback import CallbackBase
import requests
class CallbackModule(CallbackBase):
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = 'notification'
CALLBACK_NAME = 'slack_notify'
def v2_runner_on_ok(self, result):
msg = f"✅ SUCCESS: {result.task_name} on {result._host.name}"
self.send_slack(msg)
def v2_runner_on_failed(self, result, ignore_errors=False):
msg = f"❌ FAILED: {result.task_name} on {result._host.name}"
self.send_slack(msg)
def send_slack(self, message):
url = 'https://hooks.slack.com/services/XXXX/XXXX/XXXX'
requests.post(url, json={"text": message})
📄 ansible.cfg 설정
[defaults]
callback_plugins = ./callback_plugins
stdout_callback = default
🏗️ 2. 다중 환경 자동화 배포 구조 (dev/stage/prod)
📁 구조
inventory/
├── dev.yml
├── stage.yml
└── prod.yml
playbooks/
├── deploy.yml
└── vars/
├── dev.yml
├── stage.yml
└── prod.yml
📄 deploy.yml
- name: Deploy App
hosts: app_servers
become: yes
vars_files:
- "playbooks/vars/{{ env }}.yml"
tasks:
- name: Install app
shell: "echo 'Deploying {{ app_name }} {{ app_version }}'"
📄 vars/dev.yml
app_name: sample-web
app_version: 1.0-dev
📄 실행 예제
ansible-playbook -i inventory/dev.yml playbooks/deploy.yml -e env=dev
ansible-playbook -i inventory/prod.yml playbooks/deploy.yml -e env=prod
✅ 3. 테스트 자동화 (Molecule + Testinfra)
📁 구조
roles/
web/
molecule/
default/
molecule.yml
prepare.yml
converge.yml
verify.yml
tests/
test_default.py
📄 molecule.yml
platforms:
- name: instance
image: docker.io/ubuntu:22.04
pre_build_image: true
provisioner:
name: ansible
playbooks:
converge: converge.yml
verify: verify.yml
verifier:
name: testinfra
📄 test_default.py
def test_nginx_installed(host):
nginx = host.package("nginx")
assert nginx.is_installed
def test_nginx_running(host):
svc = host.service("nginx")
assert svc.is_running
assert svc.is_enabled
✅ 실행 명령
cd roles/web
molecule test
🔄 통합 실행 흐름
🧪 개발 환경
ansible-playbook -i inventory/dev.yml playbooks/deploy.yml -e env=dev
🔎 테스트
cd roles/web && molecule test
🚀 프로덕션 배포
ansible-playbook -i inventory/prod.yml playbooks/deploy.yml -e env=prod
🔔 알림 자동 발송
- 모든 작업 상태는 Slack으로 자동 전송됨
728x90
반응형