在Travis-CI上使用Docker进行多平台测试

93次阅读
没有评论

问题描述

想要在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的trustyosx,但我需要trustyxenailjessiestretch。我想这只能通过使用Docker来实现。

另一种方法是使用Docker来实现所需的多平台测试。你可以按照以下步骤进行操作:

  1. 创建一个.travis.yml文件。
  2. 在该文件中定义需要的测试平台(容器)以及它们的配置。
  3. 在每个平台上运行所需的测试脚本。

以下是一个示例.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上进行多平台测试了。

希望对你有帮助!

正文完