问题描述
想要在Travis-CI上使用Docker进行多平台测试。他希望在以下平台上进行测试:
1. Ubuntu 14.04
2. Ubuntu 16.04
3. Debian 8
4. Debian 9
他的整体概念是(对于这4个发行版):
1. docker pull ubuntu:trusty
2. docker run ubuntu:trusty
3. 在容器内部运行make test
(在我的仓库克隆中)
4. 将result.xml
复制回Travis
5. 运行scp result.xml ${SERVER_USER}@${SERVER_ADDR}:/home/${SERVER_USER}/result/
他知道如何在Docker容器内部运行脚本,但是如何在容器内获取当前分支并运行make test
让他感到困惑。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
Travis已经内置了这个功能。你可以查看这里。
此外,你不需要在make脚本中指定分支,因为Travis会在特定分支上触发,因此该版本已经被检出。
方案2
评论:Travis仅支持Linux的
trusty
和osx
,但我需要trusty
、xenail
、jessie
和stretch
。我想这只能通过使用Docker来实现。
另一种方法是使用Docker来实现所需的多平台测试。你可以按照以下步骤进行操作:
- 创建一个
.travis.yml
文件。 - 在该文件中定义需要的测试平台(容器)以及它们的配置。
- 在每个平台上运行所需的测试脚本。
以下是一个示例.travis.yml
文件:
sudo: required
services:
- docker
matrix:
include:
- name: "Ubuntu 14.04"
env: DOCKER_IMAGE=ubuntu:trusty
- name: "Ubuntu 16.04"
env: DOCKER_IMAGE=ubuntu:xenial
- name: "Debian 8"
env: DOCKER_IMAGE=debian:jessie
- name: "Debian 9"
env: DOCKER_IMAGE=debian:stretch
before_script:
- docker pull $DOCKER_IMAGE
script:
- docker run -v $TRAVIS_BUILD_DIR:/app -w /app $DOCKER_IMAGE make test
after_success:
- docker cp $DOCKER_CONTAINER_ID:/app/result.xml $TRAVIS_BUILD_DIR/result.xml
- scp $TRAVIS_BUILD_DIR/result.xml ${SERVER_USER}@${SERVER_ADDR}:/home/${SERVER_USER}/result/
在上面的示例中,我们首先定义了所需的测试平台(容器)和它们的配置。然后,在before_script
阶段,我们使用docker pull
命令拉取所需的Docker镜像。接下来,在script
阶段,我们使用docker run
命令在容器内运行make test
脚本。最后,在after_success
阶段,我们使用docker cp
命令将result.xml
文件从容器复制到Travis构建目录,并使用scp
命令将其传输到指定的服务器。
请注意,你需要将${SERVER_USER}
和${SERVER_ADDR}
替换为实际的服务器用户名和地址。
这样,你就可以使用Docker在Travis-CI上进行多平台测试了。
希望对你有帮助!