Travis-CI:将Docker镜像用作构建环境

6
在Travis CI中,是否可以从docker容器内运行构建过程?
GitLab CI中,这是默认设置。我们只需在.gitlab-ci.yml中定义镜像,然后所有的构建/测试/部署都将在该容器内运行。然而,Travis似乎对于docker的使用有完全不同的看法。我该如何在Travis中实现类似的行为?

使用 sudo: false,构建始终在 Docker 容器中进行。 - набиячлэвэли
@набиячлэвэлиь 这不是我想要的。使用 sudo: false 我们无法控制所使用的镜像。它只选择基于容器的构建基础设施。而且,基于 Docker 的构建仅在 sudo: required 下可用。 - Vahid
1个回答

10

事实证明,使用Travis-CI比起一开始看起来要容易得多。您只需编写使用docker exec调用的常规构建脚本即可。执行某些较为棘手的第三方服务集成可能需要专门的shell脚本,例如下面的codecov.io示例。

示例:

sudo: required
language: cpp
services:
  - docker
before_install:
  - docker pull user/build:latest
  - docker run -it -d --name build user/build bash
  - docker exec build git clone https://github.com/user/product.git
script:
  - docker exec build cmake -H/product -B/_build
  - docker exec build cmake --build /_build
  - docker exec build cmake --build /_build --target documentation
  - docker exec build cmake --build /_build --target run-tests
after_success:
  - docker exec build bash /project/codecov.sh

codecov.sh:

#!/usr/bin/env bash
cd /project && \
  bash <(curl -s https://codecov.io/bash) \
  -f /_build/app.coverage.txt \
  -t uuid-project-token \
  -X gcov \
  -X coveragepy \
  -X search \
  -X xcode \
  -R /project \
  -F unittests \
  -Z

使用这种技术的真实项目可以在此处找到:https://github.com/qbradq/tales-of-sosaria/tree/e28eb9877fd7071adae9ab03f40a82ea8317a7df 我在这里写了一篇关于整个过程的文章:https://normanblancaster.wordpress.com/2017/01/31/leading-edge-c-build-environments-with-docker-and-travis-ci/

1
请注意,您的Codecov令牌是以这种方式公开的。您应该声明一个Travis-CI秘密变量,并将其传递给Docker命令。 - Michael Spector

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接