Оказалось, что это проще сделать с 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/
С 'sudo: false' сборка всегда находится в a docker cuntainer –
@ набиячлэвэлиь Это не то, что я хочу. С 'sudo: false' мы не контролируем используемое изображение. Он выбирает только контейнерную инфраструктуру (https://docs.travis-ci.com/uer/ci-environment/#Virtualization-environments). Также сборка на докере доступна только для sudo: required. – Vahid