使用ansible部署docker化測試環境和普通ubuntu用於生產

使用ansible部署docker化測試環境和普通ubuntu用於生產

我需要一些幫助來部署我已經工作了一年半的系統。為了讓您能夠理解我的擔憂,我將解釋我們的基礎設施。

我們有一個伺服器(我們稱之為 TESTING_SERVER),其中我們的系統有不同的測試環境。這些環境中的每一個都完全使用 docker 運作。測試環境的每個實例都包含: 1. 使用 nginx 作為代理的 Docker 容器 2. 使用 Django Web 的 Docker 容器 3. 使用 mysql 的 Docker 容器

每次我們需要建立一個新環境用於測試目的(即:QA 想要測試新功能)時,我們都會使用 ansible playbook 在 TESTING_SERVER 上執行這些任務:

  1. 建立 Docker 網路
  2. 建立資料庫容器
  3. 複製或更新 TESTING_SERVER 中的 django git repo
  4. 建立 Django 容器
  5. 在 django 容器內執行 djangocollectstatic 指令
  6. 在 django 容器內執行 django migrate 指令
  7. 建立nginx容器

在我們的生產環境中,我們有一個運行 mysql、django 和 nginx 的普通 ubuntu 伺服器 (Production_SERVER)。每次我們必須部署到生產環境時,我們都會執行一個 ansible playbook(幾乎)重複上面列出的步驟:

  1. 檢查mysql連線(資料庫在另一台伺服器上)
  2. 在 PRODUCTION_SERVER 中的某個位置複製或更新 django git repo
  3. 檢查並重啟gunicorn(相當於創建django容器)
  4. 運行 django 收集靜態
  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
    - ...

相關內容