《Thrift官方文档》 – docker构建说明

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

以Travis CI相同的方式在本地构建

建议按照Travis CI相同的方式在本地构建, 以便在提交pull request时不那么突兀。简单起见,请将以下内容贴到 ~/.bash_aliases 文件中:

# Kill所有正在运行的容器
alias dockerkillall=’docker kill $(docker ps -q)’
 
# 删除所有已停止的容器
alias dockercleanc=’printf “/n>>> Deleting stopped containers/n/n” && docker rm $(docker ps -a -q)’
 
# 删除所有未标记的镜像
alias dockercleani=’printf “/n>>> Deleting untagged images/n/n” && docker rmi $(docker images -q -f dangling=true)’
 
# 删除所有已停止的容器和未标记的镜像
alias dockerclean=’dockercleanc || true && dockercleani’
 
# 构建thrift docker镜像 (在git仓库的顶层目录执行): 参数1为镜像类型 (ubuntu, centos, etc).
function dockerbuild
{
  docker build -t $1 build/docker/$1
}
 
# 运行thrift docker镜像: 参数1为镜像类型 (ubuntu, centos, etc).
function dockerrun
{
  docker run -v $(pwd):/thrift/src -it $1 /bin/bash
}

(以Travis CI相同的方式)拉取当前构建所用到的镜像 – 如果由于某种原因过时了将会新建一个:

thrift$ DOCKER_REPO=thrift/thrift-build DISTRO=ubuntu-xenial build/docker/refresh.sh

(以Travis CI相同的方式)运行所有单元测试:

thrift$ dockerrun ubuntu-xenial
root@8caf56b0ce7b:/thrift/src# build/docker/scripts/autotools.sh

(以Travis CI相同的方式)运行所有交叉测试:

thrift$ dockerrun ubuntu-xenial
root@8caf56b0ce7b:/thrift/src# build/docker/scripts/cross-test.sh

完成构建后,可能需要清理docker占用的多余磁盘空间:

thrift$ dockerclean

以上命令都必须在git仓库的顶层目录执行。

完成后,通过exit命令从docker shell返回到用户主机shell。当本地的单元测试和交叉测试通过后,就可以提交修改了,记得将pull request中的修改压缩为单个提交,以便合并代码,多谢。我会持续更新docker README.md文件以方便他人。这就是类Travis CI的构建方式!

Docker构建的原始命令

可以通过手动方式执行Travis CI的脚本:

构建镜像:

thrift$ docker build -t thrift build/docker/ubuntu-xenial

在镜像上打开命令行:

thrift$ docker run -v $(pwd):/thrift/src -it thrift /bin/bash

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

(0)
上一篇 2021年8月16日 03:11
下一篇 2021年8月16日 03:37

相关推荐

发表回复

登录后才能评论