Ansible 用 Travis CI 测试 Roles
怎么用 Travis CI 测试 Roles?
在「好的 Roles 应具备什么?」一节里,冻仁曾提过好的 Roles 应导入 Travis CI 整合测试,有了持续整合 (CI) 才能确保每次提交的品质。
接下来将以 chusiang.helloworld
这个简单的 role 为例,让冻仁带大家串起 GitHub, Galaxy 和 Travis CI 三个服务。
撰写一个 Role,并上传至 GitHub。 https://github.com/chusiang/helloworld.ansible.role
于 Galaxy 网站进行汇入,详请请参考「怎么在 Galaxy 汇入 Roles?」一节。 https://galaxy.ansible.com/chusiang/helloworld/
进入 Travis CI 网站。
点击左上角的 ✚ 整合新 Repository。
只需三个步骤即可整合 Travis CI。
- 将左方的开关切换至 on。
- 於 Git Repository 里新增
.travis.yml
。 - 使用
git push
即会触发 Travis CI。
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
- 此例用了
将范例 Role 左方的开关切至 on 以整合 Travis CI。
建立完毕,等待触发,这时的 build state 会是 unknown。
使用
git push
到 GitHub 后,Travis CI 会自动触发。若想把 build state 的 badge 放入
README.md
,可点击该 badge 获得各式语法。回到 Galaxy 网站,会发现多了 build state 的 badge。
以上,恭喜您学会了在 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 了。 ↩