iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 27
0

現代 IT 人一定要知道的 Ansible 自動化組態技巧

27. 怎麼用 Travis CI 測試 Roles?

在「好的 Roles 應具備什麼?」一節裡,凍仁曾提過好的 Roles 應導入 Travis CI 整合測試,有了持續整合 (CI) 才能確保每次提交的品質。

接下來將以 chusiang.helloworld 這個簡單的 role 為例,讓凍仁帶大家串起 GitHub, Galaxy 和 Travis CI 三個服務。

automate_with_ansible_practice-30.jpg

  1. 撰寫一個 Role,並上傳至 GitHub。
    2016-12-27-test-role-with-travis-1.png
    https://github.com/chusiang/helloworld.ansible.role

  2. 於 Galaxy 網站進行匯入,詳請請參考「怎麼在 Galaxy 匯入 Roles?」一節。
    2016-12-27-test-role-with-travis-2.png
    https://galaxy.ansible.com/chusiang/helloworld/

  3. 進入 Travis CI 網站。
    2016-12-27-test-role-with-travis-3.png

  4. 點擊左上角的 整合新 Repository。
    2016-12-27-test-role-with-travis-4.png

  5. 只需三個步驟即可整合 Travis CI。
    2016-12-27-test-role-with-travis-5.png

    1. 將左方的開關切換至 on。
    2. 於 Git Repository 裡新增 .travis.yml
    3. 使用 git push 即會觸發 Travis CI。
  6. chusiang.helloworld/.travis.yml 的內容如下。

    ---
    language: python
    python: "2.7"
    
    # Use the new container infrastructure
    sudo: false
    
    # Install ansible
    addons:
      apt:
        packages:
        - python-pip
    
    install:
      # Install ansible
      - pip install ansible
    
      # Check ansible version
      - ansible --version
    
      # Create ansible.cfg with correct roles_path
      - printf '[defaults]\nroles_path=../' >ansible.cfg
    
    script:
      # Basic role syntax check
      - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
    
    notifications:
      webhooks: https://galaxy.ansible.com/api/v1/notifications/
    
    • 此例用了 --syntax-check 參數進行基本的語法檢測,較進階的作法則是藉由 Docker 進行測試。
    • 使用 notificationswebhooks 發送通訊給 Galaxy。 [^1]
  7. 將範例 Role 左方的開關切至 on 以整合 Travis CI。
    2016-12-27-test-role-with-travis-6.gif

  8. 建立完畢,等待觸發,這時的 build state 會是 unknown
    2016-12-27-test-role-with-travis-7.png

  9. 使用 git push 到 GitHub 後,Travis CI 會自動觸發。
    2016-12-27-test-role-with-travis-8.png

  10. 若想把 build state 的 badge 放入 README.md,可點擊該 badge 獲得各式語法。
    2016-12-27-test-role-with-travis-10.png

  11. 回到 Galaxy 網站,會發現多了 build state 的 badge。
    2016-12-27-test-role-with-travis-9.png

以上,恭喜您學會了在 Roles 加入 Travis CI 自動化測試的技能。

凍仁提醒您:「當 build state badge 顯示 fail 時,記得回頭修一下 Roles 喔!」

後語

此文發佈不到一天,凍仁就收到熱心網友回報的 bug issue。百忙之中上了 hotfix 修正,並確認 Travis CI 測試無誤。

仔細回想,要是當初沒這麼做,誰又可以確保半年前寫的 code 現在還可以正常運作呢!

相關連結

[^1]: 凍仁半年前剛使用 Galaxy 和 Travis CI 時,要讓 Travis CI 發通知到 Galaxy,除了 .travis.yml 要寫 notifications,還需手動於 Galaxy 設置 Travis CI 的 Token;而現在已不需額外設置 Travis CI Token 了。


上一篇
26. 怎麼在 Ansible Galaxy 分享 Roles?(下)
下一篇
28. 怎麼混用 Ansible 建置 Docker image?
系列文
現代 IT 人一定要知道的 Ansible 自動化組態技巧31

尚未有邦友留言

立即登入留言