codecamp

Ansible 用 Travis CI 测试 Roles

怎么用 Travis CI 测试 Roles?

在「好的 Roles 应具备什么?」一节里,冻仁曾提过好的 Roles 应导入 Travis CI 整合测试,有了持续整合 (CI) 才能确保每次提交的品质。

接下来将以 chusiang.helloworld 这个简单的 role 为例,让冻仁带大家串起 GitHubGalaxy 和 Travis CI 三个服务。

automate_with_ansible_practice-30.jpg

  1. 撰写一个 Role,并上传至 GitHub。 2016-12-27-test-role-with-travis-1.pnghttps://github.com/chusiang/helloworld.ansible.role

  2. 于 Galaxy 网站进行汇入,详请请参考「怎么在 Galaxy 汇入 Roles?」一节。 2016-12-27-test-role-with-travis-2.pnghttps://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 进行测试。
    • 使用 notifications 和 webhooks 发送通讯给 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 了。 ↩


Ansible 在 Ansible Galaxy 分享 Roles(下)
Ansible 混用 Ansible 建置 Docker image
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }