Travis-CI по-прежнему является самой популярной системой CI, используемой в проектах со свободным и открытым исходным кодом, особенно из-за ее открытого катлера и того факта, что в теории Travis-CI сам является открытым исходным кодом .
Популярность Travis-CI имеет свою цену. Поскольку все больше и больше проектов с открытым исходным кодом используют бесплатный сервис Travis-CI и все больше проектов запускают больше тестов, выполнение всех тестов занимает больше времени.
Я все еще думаю, что Travis-CI-отличный сервис, особенно теперь, когда он поддерживает этапы сборки .
Здесь я представляю CircleCI как способ использовать предложения, предоставляемые Circle-CI сообществу с открытым исходным кодом.
Я предлагаю запустить половину ваших сборок на Travis-CI, а другую половину на CircleCI.. и если вам нужна Windows, запустите тесты Windows на Appevyor , поскольку Appveyor также бесплатен для проектов с открытым исходным кодом.
Ресурсы Circle-CI с открытым исходным кодом
Для проектов с открытым исходным кодом команда CircleCI достаточно щедра и предоставляет следующие ресурсы бесплатно:
- 4 параллельные сборки Linux docker (после включения функций с открытым исходным кодом)
- Начальный план для сборок macOS (после отправки электронного письма в Circle-CI billing)
У Travis-CI также есть сборки Mac OS для проектов с открытым исходным кодом, но очереди на Travis-CI всегда были длинными.
До сих пор на Circle-CI сборки проводили в очереди не более 5 секунд, в то время как на Travis-CI это были часы. Может быть, Трэвису-КИ сейчас лучше.
Активация функций с открытым исходным кодом
Предполагая, что вы включили CircleCI для своего проекта (репозитория), по умолчанию вы не получите все ресурсы, доступные для проектов с открытым исходным кодом.
Они должны быть включены на странице Advances Settings вашего репо. URL – адрес выглядит как https://circleci.com/gh/ORG-NAME/REPO-NAME/edit#advanced-settings
Возможно, вы захотите включить следующие функции:
- Бесплатный и с открытым исходным кодом – чтобы получить 4 докера Linux вместо 1.
- Построить разветвленные запросы на вытягивание – чтобы позволить внешним участникам запускать тесты в рамках PR
- Только запросы на сборку (необязательно)- чтобы не тратить ресурсы на коммиты, выталкиваемые за пределы aPR.
Когда вы включаете сборки для PR, обязательно отключите Передачу секретов сборкам из разветвленных запросов на вытягивание , чтобы не допустить утечки секретов.
Не забудьте включить значок Circle-CI в файл README вашего репо. URL – адрес для получения кода для велосипеда выглядит следующим образом https://circleci.com/gh/ORG-NAME/REPO-NAME/edit#badges
Как только вы настроитесь, не забудьте добавить доступ к администрированию CircleCI для других разработчиков из вашего сообщества. Таким образом, можно настроить CircleCI, даже когда вас нет рядом. URL – адрес выглядит как https://circleci.com/team/gh/ORG-NAME
.
Уведомления в CircleCI
Если вы знакомы с Travis-CI, вы можете настроить уведомления.
CircleCI предоставляет все обычные функции уведомлений (электронная почта, Slack, IRC). На данный момент эти конфигурации недоступны из конфигурационного файла YAML, и вам нужно будет настроить их из пользовательского интерфейса Circle-CI.
Настройки уведомлений по электронной почте находятся в вашем личном кабинете (даже для уведомлений проекта), поэтому ознакомьтесь с ними по адресу https://circleci.com/account/notifications
Пример проекта Python в Linux и mac OS
Я не буду вдаваться в подробности здесь, так как документация Circle-CI версии 2.0 довольно хороша.
Для Linux Circle-CI-это все о Docker. Вместо того, чтобы иметь фиксированную ОС (например, старую Ubuntu 12.04 или 14.04), вы можете запустить ее в любом контейнере docker. В начале я предлагаю использовать один из готовых образов и начать с простого примера.
Одна вещь, которую я хочу показать вам здесь, заключается в том, что вы можете использовать сборки macOS для чего угодно, а не только для проектов XCode. Для этого примера я сохраняю его простым и использую версию Python, предоставленную macOS. У вас есть полный контроль над системой Mac OS, поэтому вы можете установить Homebrew и запустить свою собственную среду.
Еще одной замечательной особенностью является отличная функциональность рабочего процесса. Вы можете использовать его для выполнения множества приятных вещей, особенно для развертывания. В этом примере я приведу простой пример, в котором тесты выполняются только после того, как статические шашки будут зелеными.
В большинстве случаев, если вы забудете определить переменную или ваш код нарушает стандарт кодирования, вы получите глупую сборку, и окончательная сборка все равно завершится неудачей. Вам все равно придется повторно запускать тесты, так зачем тратить время на тестирование?
Вот как выглядит рабочий процесс для этого примера:
Вот полный рабочий пример. Вот и все. Счастливого тестирования!
version: 2 jobs: static_checkers: working_directory: ~/static-checkers docker: - image: circleci/python:2.7 steps: # Get the source. - checkout - run: name: Prepare the environment. command: | python --version pip install -q --user --ignore-installed --upgrade virtualenv pip install -q tox --user echo 'export PATH=~/.local/bin:$PATH' >> $BASH_ENV # Run each checker in a separate step. - run: name: Check the release notes. command: | tox -r -e newsfragment - run: name: Check manifest-checker. command: | tox -r -e manifest-checker - run: name: Check pyflakes. command: | tox -r -e pyflakes # # Documentation tests are slow so we execute them in a separate job. # documentation: working_directory: ~/documentation docker: - image: circleci/python:2.7 steps: # Get the source. - checkout - run: name: Prepare the environment. command: | python --version pip install -q --user --ignore-installed --upgrade virtualenv pip install -q tox --user echo 'export PATH=~/.local/bin:$PATH' >> $BASH_ENV - run: name: Check the narrative documentation. command: | tox -r -e narrativedocs - run: name: Check the API documentation. command: | tox -r -e apidocs # # We run pyflakes with Python 3 . # pyflakes3: working_directory: ~/pyflakes3 docker: - image: circleci/python:3.6 steps: # Get the source. - checkout - run: name: Prepare the environment. command: | python --version pip install -q --user --ignore-installed --upgrade virtualenv pip install -q tox --user echo 'export PATH=~/.local/bin:$PATH' >> $BASH_ENV - run: name: Check the API documentation. command: | tox -r -e pyflakes3 # # MacOS with Python2.7 and default reactor. # macos_py27_default_reactor: macos: # We don't use the xcode, but we need to put something here. xcode: "9.0" working_directory: ~/repo steps: # Get the source. - checkout - run: name: Prepare the macOS environment. command: | python --version pip install -q --user --ignore-installed --upgrade virtualenv pip install -q tox --user echo 'export PATH=/usr/local/bin:$PATH:/Users/distiller/Library/Python/2.7/bin' >> $BASH_ENV # Run tests with tox without any cached dependencies. - run: name: Test with the default reactor. command: | tox -r -e py27-alldeps-withcov-posix twisted # First we run the static checkers, and only if they pass we spin the macOS. # in this way we should save some macOS minutes. workflows: version: 2 all-tests: jobs: - static_checkers - macos_py27_default_reactor: requires: - static_checkers - documentation: requires: - static_checkers - pyflakes3: requires: - static_checkers