Docker 集成
由于Apache Thrift的构建需要依赖多种编程语言,为了最大限度地保证测试覆盖率,我们使用docker容器在多种不同平台上构建和测试Thrift。
Travis CI 集成
Travis CI 脚本的行为,由下面的环境变量和逻辑来决定。
环境变量
变量名 | 默认值 | 用途 |
---|---|---|
DISTRO |
ubuntu-xenial |
由 .travis.yml 中多种构建任务设置,以在不同容器中进行构建。请不要在其它地方设置该变量。 |
DOCKER_REPO |
thrift/thrift-build |
Docker Hub 仓库的名字,用于获取和存储docker镜像 |
DOCKER_USER |
<none> |
Docker Hub 用户名 |
DOCKER_PASS |
<none> |
Docker Hub 密码,推送tag时使用 |
例如,在未指定docker镜像时,默认使用 thrift/thrift-build:ubuntu-xenial
进行构建。
分叉
如果是从Apache Thrift代码库fork出的分支,并希望使用自定义的Docker Hub账户存储thrift构建镜像,可以通过 Travis CI Web界面设置DOCKER_USER
, DOCKER_PASS
, DOCKER_REPO
环境变量。这样fork分支的构建将会使用指定的账户来拉取、推送docker镜像并打tag。
逻辑
Travis CI 构建包括两个阶段。第一阶段:在支持的三种容器中,如果任何一个容器不匹配最近一次构建tag所用的Dockerfile,则会重建docker镜像。第二阶段:在指定了DOCKER_PASS
环境变量时,docker构建会尝试登录Docker Hub并推送生成的tag。
支持的容器
Travis CI (持续集成) 构建使用 Ubuntu Trusty, Xenial, 和 Artful 镜像来最大化语言级覆盖度。
Ubuntu
- xenial (stable)
- artful (current)
不支持的容器
以下容器千差万别,并非完全可用。
CentOS
- 7.3
- make check 在构建 lib/py 时会卡在 test_sslsocket – 根本原因未知
Debian
- jessie
- stretch
- make check 在构建 lib/cpp 时失败,原因: https://svn.boost.org/trac10/ticket/12507
以Travis CI相同的方式在本地构建
建议按照Travis CI相同的方式在本地构建, 以便在提交pull request时不那么突兀。简单起见,请将以下内容贴到 ~/.bash_aliases
文件中:
(以Travis CI相同的方式)拉取当前构建所用到的镜像 – 如果由于某种原因过时了将会新建一个:
(以Travis CI相同的方式)运行所有单元测试:
(以Travis CI相同的方式)运行所有交叉测试:
完成构建后,可能需要清理docker占用的多余磁盘空间:
以上命令都必须在git仓库的顶层目录执行。
完成后,通过exit
命令从docker shell返回到用户主机shell。当本地的单元测试和交叉测试通过后,就可以提交修改了,记得将pull request中的修改压缩为单个提交,以便合并代码,多谢。我会持续更新docker README.md文件以方便他人。这就是类Travis CI的构建方式!
Docker构建的原始命令
可以通过手动方式执行Travis CI的脚本:
构建镜像:
在镜像上打开命令行:
Dockerfile的核心工具版本
最后更新时间: October 1, 2017
Tool | ubuntu-xenial | ubuntu-artful | Notes |
---|---|---|---|
ant | 1.9.6 | 1.9.9 | |
autoconf | 2.69 | 2.69 | |
automake | 1.15 | 1.15 | |
bison | 3.0.4 | 3.0.4 | |
boost | 1.58.0 | 1.63.0 | artful: stock boost 1.62.0 has problems running unit tests |
cmake | 3.5.1 | 3.9.1 | |
cppcheck | 1.72 | 1.80 | |
flex | 2.6.0 | 2.6.1 | |
glibc | 2.23 | 2.26 | |
libevent | 2.0.21 | 2.1 | |
libstdc++ | 5.4.0 | 7.2.0 | |
make | 4.1 | 4.1 | |
openssl | 1.0.2g | 1.0.2g | |
qt5 | 5.5.1 | 5.9.1 |
Dockerfile的编译器和语言版本
Language | ubuntu-xenial | ubuntu-artful | Notes |
---|---|---|---|
as of | Mar 06, 2018 | Mar 19, 2018 | |
as3 | Not in CI | ||
C++ gcc | 5.4.0 | 7.2.0 | |
C++ clang | 3.8 | 4.0 | |
C# (mono) | 4.2.1.0 | 4.6.2.7 | |
c_glib | 2.48.2 | 2.54.0 | |
cl (sbcl) | 1.4.5 | ||
cocoa | Not in CI | ||
d | 2.073.2 | 2.077.1 | |
dart | 1.22.1 | 1.24.3 | |
delphi | Not in CI | ||
dotnet | 2.1.4 | 2.1.4 | v2.1.4 SDK uses v2.0.5 Runtime |
erlang | 18.3 | 20.0.4 | |
go | 1.7.6 | 1.10 | |
haskell | 7.10.3 | 8.0.2 | |
haxe | 3.2.1 | 3.4.4 | THRIFT-4352: avoid 3.4.2 |
java | 1.8.0_151 | 1.8.0_151 | |
js | Unsure how to look for version info? | ||
lua | 5.2.4 | 5.2.4 | Lua 5.3: see THRIFT-4386 |
nodejs | 6.13.0 | 8.9.4 | |
ocaml | 4.04.0 | THRIFT-4517: ocaml 4.02.3 on xenial appears broken | |
perl | 5.22.1 | 5.26.0 | |
php | 7.0.22 | 7.1.11 | |
python | 2.7.12 | 2.7.14 | |
python3 | 3.5.2 | 3.6.3 | |
ruby | 2.3.1p112 | 2.3.3p222 | |
rust | 1.17.0 | 1.21.0 | |
smalltalk | Not in CI | ||
swift | Not in CI |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/93550.html