Travis-CI: изображение докера в качестве среды сборки

В Travis CI можно запустить процесс сборки из контейнера докеров?

В GitLab CI это значение по умолчанию. Мы можем просто определить изображение в .gitlab-ci.yml тогда все развертывание build / test / deploy будет запущено внутри этого контейнера. Тем не менее, у Трэвиса, похоже, совершенно разные взгляды на использование докеров. Как я могу достичь аналогичного поведения в Трэвисе?

Оказывается, это проще сделать с Travis-CI, чем кажется на первый взгляд. Все, что вам нужно сделать, это написать свой обычный скрипт сборки, используя вызовы docker exec . Выполнение некоторых из более сложных сторонних сервисов может потребовать специальных сценариев оболочки, как в примере 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/