Данная лабораторная работа посвещена изучению систем непрерывной интеграции на примере сервиса Travis CI
$ open https://travis-ci.org
- 1. Авторизоваться на сервисе Travis CI с использованием GitHub аккаунта
- 2. Создать публичный репозиторий с названием lab04 на сервисе GitHub
- 3. Ознакомиться со ссылками учебного материала
- 4. Включить интеграцию сервиса Travis CI с созданным репозиторием
- 5. Получить токен для Travis CLI с правами repo и user
- 6. Получить фрагмент вставки значка сервиса Travis CI в формате Markdown
- 7. Выполнить инструкцию учебного материала
- 8. Составить отчет и отправить ссылку личным сообщением в Slack
Установка переменных
$ export GITHUB_USERNAME=hijadelaluuna
$ export GITHUB_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Подготовка рабочего пространства
$ cd ${GITHUB_USERNAME}/workspace # Переход в папку workspace
$ pushd . # Сохранение текущей директории
$ source scripts/activate # Выполнение скрипта подготовки
Установка инструментов для работы с Travis CI
$ \curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles # Получение и установка bash-файла
Turning on ignore dotfiles mode.
Downloading https://github.com/rvm/rvm/archive/master.tar.gz
Installation of RVM in /home/overdose/.rvm/ is almost complete:
in all your open shell windows, in rare cases you need to reopen all shell windows.
Thanks for installing RVM 🙏
Please consider donating to our open collective to help us maintain RVM.
👉 Donate: https://opencollective.com/rvm/donate
$ echo "source $HOME/.rvm/scripts/rvm" >> scripts/activate
# Дописывание команды запуска rvm в скрипт
$ . scripts/activate # Активация скрипта
$ rvm autolibs disable # Диактивация зависимостей
$ rvm install ruby-2.4.2 #Установление ruby
Warning, new version of rvm available '1.29.8', you are using older version '1.29.8-next'.
You can disable this warning with: echo rvm_autoupdate_flag=0 >> ~/.rvmrc
You can enable auto-update with: echo rvm_autoupdate_flag=2 >> ~/.rvmrc
You can update manually with: rvm get VERSION (e.g. 'rvm get stable')
Searching for binary rubies, this might take some time.
No binary rubies available for: manjaro/18.0.4/x86_64/ruby-2.4.2.
Continuing with compilation. Please read 'rvm help mount' to get more information on binary rubies.
Installing Ruby from source to: /home/absinthetoxin/.rvm/rubies/ruby-2.4.2, this may take a while depending on your cpu(s)...
ruby-2.4.2 - #downloading ruby-2.4.2, this may take a while depending on your connection...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12.0M 100 12.0M 0 0 85192 0 0:02:27 0:02:27 --:--:-- 89798
No checksum for downloaded archive, recording checksum in user configuration.
ruby-2.4.2 - #extracting ruby-2.4.2 to /home/absinthetoxin/.rvm/src/ruby-2.4.2.|
ruby-2.4.2 - #configuring......................................................-
ruby-2.4.2 - #post-configuration..
ruby-2.4.2 - #compiling.........................................................
ruby-2.4.2 - #installing.............
ruby-2.4.2 - #making binaries executable..
ruby-2.4.2 - #downloading rubygems-3.0.3
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 882k 100 882k 0 0 113k 0 0:00:07 0:00:07 --:--:-- 133k
No checksum for downloaded archive, recording checksum in user configuration.
ruby-2.4.2 - #extracting rubygems-3.0.3.....
ruby-2.4.2 - #removing old rubygems........
ruby-2.4.2 - #installing rubygems-3.0.3...................................
ruby-2.4.2 - #gemset created /home/absinthetoxin/.rvm/gems/ruby-2.4.2@global
ruby-2.4.2 - #importing gemset /home/absinthetoxin/.rvm/gemsets/global.gems....-
ruby-2.4.2 - #generating global wrappers.......
ruby-2.4.2 - #gemset created /home/absinthetoxin/.rvm/gems/ruby-2.4.2
ruby-2.4.2 - #importing gemsetfile /home/absinthetoxin/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.4.2 - #generating default wrappers.......
ruby-2.4.2 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
Install of ruby-2.4.2 - #complete
Ruby was built without documentation, to build it run: rvm docs generate-ri
$ rvm use 2.4.2 --default # Установка установленной версии как основной
Using /home/absinthetoxin/.rvm/gems/ruby-2.4.2
$ gem install travis # Установка travis
Fetching faraday-0.15.4.gem
Fetching highline-1.7.10.gem
Fetching multipart-post-2.1.1.gem
Fetching multi_json-1.13.1.gem
Fetching addressable-2.4.0.gem
Fetching net-http-persistent-2.9.4.gem
Fetching launchy-2.4.3.gem
Fetching net-http-pipeline-1.0.1.gem
Fetching backports-3.15.0.gem
Fetching gh-0.15.1.gem
Fetching typhoeus-0.8.0.gem
Fetching websocket-1.2.8.gem
Fetching travis-1.8.10.gem
Fetching ffi-1.11.1.gem
Fetching ethon-0.12.0.gem
Fetching faraday_middleware-0.13.1.gem
Fetching pusher-client-0.6.2.gem
Successfully installed multipart-post-2.1.1
Successfully installed faraday-0.15.4
Successfully installed faraday_middleware-0.13.1
Successfully installed highline-1.7.10
Successfully installed backports-3.15.0
Successfully installed multi_json-1.13.1
Successfully installed addressable-2.4.0
Successfully installed net-http-persistent-2.9.4
Successfully installed net-http-pipeline-1.0.1
Successfully installed gh-0.15.1
Successfully installed launchy-2.4.3
Building native extensions. This could take a while...
Successfully installed ffi-1.11.1
Successfully installed ethon-0.12.0
Successfully installed typhoeus-0.8.0
Successfully installed websocket-1.2.8
Successfully installed pusher-client-0.6.2
Successfully installed travis-1.8.10
Parsing documentation for multipart-post-2.1.1
Installing ri documentation for multipart-post-2.1.1
Parsing documentation for faraday-0.15.4
Installing ri documentation for faraday-0.15.4
Parsing documentation for faraday_middleware-0.13.1
Installing ri documentation for faraday_middleware-0.13.1
Parsing documentation for highline-1.7.10
Installing ri documentation for highline-1.7.10
Parsing documentation for backports-3.15.0
Installing ri documentation for backports-3.15.0
Parsing documentation for multi_json-1.13.1
Installing ri documentation for multi_json-1.13.1
Parsing documentation for addressable-2.4.0
Installing ri documentation for addressable-2.4.0
Parsing documentation for net-http-persistent-2.9.4
Installing ri documentation for net-http-persistent-2.9.4
Parsing documentation for net-http-pipeline-1.0.1
Installing ri documentation for net-http-pipeline-1.0.1
Parsing documentation for gh-0.15.1
Installing ri documentation for gh-0.15.1
Parsing documentation for launchy-2.4.3
Installing ri documentation for launchy-2.4.3
Parsing documentation for ffi-1.11.1
Installing ri documentation for ffi-1.11.1
Parsing documentation for ethon-0.12.0
Installing ri documentation for ethon-0.12.0
Parsing documentation for typhoeus-0.8.0
Installing ri documentation for typhoeus-0.8.0
Parsing documentation for websocket-1.2.8
Installing ri documentation for websocket-1.2.8
Parsing documentation for pusher-client-0.6.2
Installing ri documentation for pusher-client-0.6.2
Parsing documentation for travis-1.8.10
Installing ri documentation for travis-1.8.10
Done installing documentation for multipart-post, faraday, faraday_middleware, highline, backports, multi_json, addressable, net-http-persistent, net-http-pipeline, gh, launchy, ffi, ethon, typhoeus, websocket, pusher-client, travis after 36 seconds
17 gems installed
Клонирование репозитория ЛР3 в ЛР4
$ git clone https://github.com/${GITHUB_USERNAME}/lab03 projects/lab04 # Клонирование репозитория
Клонирование в «projects/lab04»…
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 27 (delta 4), reused 23 (delta 3), pack-reused 0
Распаковка объектов: 100% (27/27), готово.
$ cd projects/lab04 # Переход в директорию
$ git remote remove origin # Удаление связки с репозиторием
$ git remote add origin https://github.com/${GITHUB_USERNAME}/lab04 # Добавление связки
Записывание в .travis.yml информации о языке
$ cat > .travis.yml <<EOF # Запись в .travis.yml
language: cpp
EOF
Дописывание в .travis.yml команд, выполняющихся при интеграции
$ cat >> .travis.yml <<EOF # Дозапись в .travis.yml
script:
- cmake -H. -B_build -DCMAKE_INSTALL_PREFIX=_install
- cmake --build _build
- cmake --build _build --target install
EOF
Добавление в .travis.yml информации об устанавливаемых пакетах
$ cat >> .travis.yml <<EOF
addons:
apt:
sources:
- george-edison55-precise-backports
packages:
- cmake
- cmake-data
EOF
Авторизация в сервисе Travis CI по токену
$ travis login --github-token ${GITHUB_TOKEN} # Авторизация
Successfully logged in as CrazyOverdose!
Проверка
$ travis lint
Warnings for .travis.yml:
[x] value for addons section is empty, dropping
[x] in addons section: unexpected key apt, dropping
Добавление в начало файла строки с фрагментом вставки значка сервиса Travis CI в формате Markdown
$ sed -i '1i|[![Build Status](https://travis-ci.org/CrazyOverdose/lab04.svg?branch=master)](https://travis-ci.org/CrazyOverdose/lab04)' README.md # Команда изменена
Отправка изменений
$ git add .travis.yml # Фиксирование
$ git add README.md # Фиксирование
$ git commit -m"added CI" # Добавление коммита
[master da3553a] added CI
2 files changed, 14 insertions(+)
create mode 100644 .travis.yml
$ git push origin master # Отправка изменений
Username for 'https://github.comCrazyOverdose
Password for 'https://[email protected]':
Перечисление объектов: 31, готово.
Подсчет объектов: 100% (31/31), готово.
Сжатие объектов: 100% (26/26), готово.
Запись объектов: 100% (31/31), 14.38 KiB | 3.59 MiB/s, готово.
Всего 31 (изменения 6), повторно использовано 0 (изменения 0)
remote: Resolving deltas: 100% (6/6), done.
To https://github.com/CrazyOverdose/lab04
* [new branch] master -> master
Работа с Travis CI
$ travis lint # Проверка конфига
Warnings for .travis.yml:
[x] value for addons section is empty, dropping
[x] in addons section: unexpected key apt, dropping
$ travis accounts #Информация об аккаунте
hijadelaluuna (hijadelaluuna): subscribed, 13 repositories
$ travis sync # Синхронизация
synchronizing: .. done
$ travis repos #Список репозиториев
hijadelaluuna/lab00 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение систем обмена данными
hijadelaluuna/lab003 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение систем автоматизации сборки проекта на примере CMake
hijadelaluuna/lab006 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение средств пакетирования на примере CPack
hijadelaluuna/lab01 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение утилит для разработки проектов
hijadelaluuna/lab02 (active: no, admin: yes, push: yes, pull: yes)
Description: ???
hijadelaluuna/lab03 (active: no, admin: yes, push: yes, pull: yes)
Description: ???
hijadelaluuna/lab04 (active: yes, admin: yes, push: yes, pull: yes)
Description: ???
hijadelaluuna/lab05 (active: no, admin: yes, push: yes, pull: yes)
Description: ???
hijadelaluuna/lab06 (active: no, admin: yes, push: yes, pull: yes)
Description: ???
hijadelaluuna/lab07 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение систем управления пакетами на примере Hunter
hijadelaluuna/laba04 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение систем непрерывной интеграции на примере сервиса Travis CI
hijadelaluuna/laba05 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение фреймворков для тестирования на примере GTest
hijadelaluuna/labaa02 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение систем контроля версий на примере Git
$ travis enable # Активация проекта
Detected repository as hijadelaluuna/lab04, is this correct? |yes| yes
CrazyOverdose/lab04: enabled :)
$ travis whatsup # Список последних сборок
CrazyOverdose/lab04 passed: #1
$ travis branches # Список последних сборок по веткам проекта
master: #1 passed added CI
$ travis history # История сборок для проекта
#1 passed: master added CI
$ travis show # Основная информация о последней сборке
Job #1.1: added CI
State: passed
Type: push
Branch: master
Compare URL: https://github.com/CrazyOverdose/lab04/compare/89df61653546^...da3553aea864
Duration: 28 sec
Started: 2019-06-09 19:09:31
Finished: 2019-06-09 19:09:59
Allow Failure: false
Config: os: linux
$ popd
$ export LAB_NUMBER=04
$ git clone https://github.com/tp-labs/lab${LAB_NUMBER} tasks/lab${LAB_NUMBER}
$ mkdir reports/lab${LAB_NUMBER}
$ cp tasks/lab${LAB_NUMBER}/README.md reports/lab${LAB_NUMBER}/REPORT.md
$ cd reports/lab${LAB_NUMBER}
$ edit REPORT.md
$ gistup -m "lab${LAB_NUMBER}"
Вы продолжаете проходить стажировку в "Formatter Inc." (см подробности).
В прошлый раз ваше задание заключалось в настройке автоматизированной системы CMake.
Сейчас вам требуется настроить систему непрерывной интеграции для библиотек и приложений, с которыми вы работали в прошлый раз. Настройте сборочные процедуры на различных платформах:
- используйте TravisCI для сборки на операционной системе Linux с использованием компиляторов gcc и clang;
- используйте AppVeyor для сборки на операционной системе Windows.
Copyright (c) 2015-2019 The ISC Authors