Ansible을 사용하여 Docker화된 테스트 환경 및 프로덕션용 일반 우분투 배포

Ansible을 사용하여 Docker화된 테스트 환경 및 프로덕션용 일반 우분투 배포

지금까지 1년 반 동안 일해 온 시스템을 배포하는 데 도움이 필요합니다. 저의 우려 사항을 이해하실 수 있도록 당사 인프라에 대해 조금 설명하겠습니다.

우리 시스템에 대한 다양한 테스트 환경을 갖춘 서버(TESTING_SERVER라고 함)가 있습니다. 이러한 각 환경은 전적으로 docker로 실행됩니다. 테스트 환경의 각 인스턴스는 다음으로 구성됩니다. 1. nginx가 프록시 역할을 하는 Docker 컨테이너 2. Django 웹이 있는 Docker 컨테이너 3. mysql이 있는 Docker 컨테이너

테스트 목적으로 새 환경을 구축해야 할 때마다(예: QA가 새 기능을 테스트하려고 함) TESTING_SERVER에서 다음 작업을 실행하는 Ansible 플레이북을 사용합니다.

  1. 도커 네트워크 만들기
  2. 데이터베이스 컨테이너 생성
  3. TESTING_SERVER 어딘가에 django git repo를 복제하거나 업데이트하세요.
  4. django 컨테이너 생성
  5. django 컨테이너 내에서 django Collectstatic 명령 실행
  6. django 컨테이너 내에서 django migration 명령 실행
  7. nginx 컨테이너 생성

우리 프로덕션 환경에는 mysql, django 및 nginx를 실행하는 일반 우분투 서버(PRODUCTION_SERVER)가 있습니다. 프로덕션에 배포해야 할 때마다 위에 나열된 단계를 (거의) 반복하는 Ansible 플레이북을 실행합니다.

  1. mysql 연결을 확인하십시오 (db는 다른 서버에 있습니다)
  2. PRODUCTION_SERVER 어딘가에 django git repo를 복제하거나 업데이트하세요.
  3. gunicorn을 확인하고 다시 시작합니다(django 컨테이너 생성과 동일).
  4. django Collectstatic 실행
  5. django 마이그레이션 실행
  6. nginx 구성 확인

이 두 플레이북은 서로 다르지만 공통점이 많습니다. 각 단계를 ansible 작업으로 변환하고 조건을 사용하여 어떤 작업(dockerized 또는 direct)을 실행해야 하는지 파악하려고 했습니다. 하지만 여전히 각 단계마다 다른 작업이 있습니다(동일한 플레이북이지만 약간 까다로워 보입니다).

내 질문은: 이러한 플레이북을 반복하지 않고 하나만 갖도록 "병합"하는 방법이 있습니까?

답변1

모범 사례 문서에 설명된 것과 유사하게 "작업"별로 역할을 생성하고 플레이북에서 사용합니다.

http://docs.ansible.com/ansible/latest/playbooks_best_practices.html#directory-layout

예를 들어

roles/  
  create_a_docker_network/  
    tasks/  
      main.yml  
  create_database_container/...
  ...  
  Create_nginx_container/

플레이북에서 역할을 호출하세요.

테스트.yml

- hosts: testserver
  roles:
    - create_a_docker_network
    - create_database_container
    - ...

관련 정보