在AppVeyor上配置Python项目
2018-01-13 22:45:56 +08 字数:2004 标签: GitHub Python本文介绍如何用AppVeyor来做纯Python项目的集成测试。
(以上图示源于官网,并非Python项目示例。)
简介 ¶
在GitHub上做CI,大哥是Travis。 不过,Travis只支持Ubuntu和Mac OS X环境。 这就给二哥AppVeyor留下了生存空间,它专门负责做Windows环境的CI,并且对Windows生态下的.NET、Azure等,提供了很好的支持。 官方文档《Supporting Windows using Appveyor — Python Packaging User Guide》,就推荐用AppVeyor来做Windows下的编译验证、测试和wheel发布。
和Travis的.travis.yml
配置文件类似,AppVeyor也支持一个appveyor.yml
配置文件。
(也可命名为.appveyor.yml
,早期Windows不支持.
开头的文件名。)
不同的是,AppVeyor支持一个复杂的设置页面,也可以完全不用写appveyor.yml
,全部手动设置。
果然不愧是Windows生态的CI,这一点很符合Windows的哲学。
配置文件与在线设置UI相比,互有优劣。 有时候,孤就挺烦Travis的,尤其是在用tag发布失败的时候——必须修改Git历史、重新打tag、并强制更新远程Git库,才能解决这类问题。 这就是把CI配置和项目代码混合管理的一个缺陷。
不过,把设置项用一目了然的配置文件来写,是非常Geek的做法。 这符合去UI化、纯文本化的思路。 那么,既然已经是纯文本了,当然可以用Git来管理; 既然用Git来管理了,那么不如和项目代码放在同一个Git库吧——有时候,技术规范的发展思路就是这么简单。
孤还是更认可『纯文本化』的思路。些许缺陷,可以忍耐。
appveyor.yml示例 ¶
如果要阐述怎么在网页上设置一个Python的AppVeyor项目,那得难死孤了。 一大堆截图是必须的,可能还得录个gif动图,或者段视频什么的。
如果用配置文件,那就简单多了。
environment:
matrix:
- PYTHON: "C:\\Python27"
- PYTHON: "C:\\Python27-x64"
- PYTHON: "C:\\Python35-x64"
- PYTHON: "C:\\Python36-x64"
skip_commits:
files:
- "*.yml"
- "*.rst"
- "LICENSE"
install:
- "%PYTHON%\\python.exe -m pip install . -r requirements.txt"
build: off
test_script:
- "%PYTHON%\\python.exe -m pytest"
notifications:
- provider: Email
to:
- yanqd0@outlook.com
on_build_status_changed: true
以下简要介绍这个文件的部分配置项的涵义。
environment ¶
environment
是对一些环境进行设置,而matrix
则是根据指定环境,进行组合。
PYTHON
是指定一个环境变量,指向Python的位置。
AppVeyor上已经默认预装了主流版本的Python,并包含x86与x64两种架构。
本例中,会跑Python 2.7的x86、x64、以及Python 3.5与3.6的x64四种环境的Job。
由于(免费版)AppVeyor的Job并行数只有1,所以对一次commit没必要设太多Job。
skip_commits ¶
默认情况下,AppVeyor支持提交信息中包含[skip ci]
或[ci skip]
这种通用风格的忽略,也支持[skip appveyor]
这种专门的忽略。
除此之外,也支持用message
自定义的忽略关键词,以及按author
、files
进行忽略。
除了忽略,也通过only_commits
支持逻辑相反的『仅包括』。
本例中,忽略了项目根目录下*.yml
、*.rs
和LICENSE
这三类文件的修改,只对其它文件修改的提交做CI。
更多信息可参考《Setting up commits filtering | AppVeyor》。
install ¶
预装一些需要的东西。
本例中,利用了requirements.txt
来进行配置。
build ¶
这个部分是留给Windows生态的那些项目用的,Python项目填off
即可。
test_script ¶
由于不知道pytest
被安到哪里去了,是否直接可执行,所以只能通过python.exe
来跑测试。
支持更广泛的配置方式,是python.exe setup.py test
。
notifications ¶
这部分配置的是通知信息,并非必要。 其实,这类信息不适合放在VCS中,去UI界面配置会更合适。
Validate ¶
写好配置文件后,提前做出验证是一个良好的习惯。
不像Travis有CLI支持,要验证appveyor.yml
文件的合法性,只能访问:https://ci.appveyor.com/tools/validate-yaml
Badges ¶
最后,在项目对应的【Settings】【Badges】里,可以找到对应的徽章,放在项目介绍页面中。
由于官方只给出了Markdown风格的样例,这里提供一个README.rst
的样例。
毕竟,reStructuredText才是Python生态里的官方标记语言。
.. image:: https://img.shields.io/appveyor/ci/USER/PROJECT.svg
:target: https://ci.appveyor.com/project/USER/PROJECT
:alt: AppVeyor
大致效果如下:
参考 ¶
除了孤展示的appveyor.yml
以外,可以参考的还有:
以下是官方文档中有关的部分。 不得不说一句,AppVeyor的(2018年1月)文档也做得没有Travis好,连搜索功能都没有。