Данная лабораторная работа посвещена изучению систем непрерывной интеграции на примере сервиса Travis CI
Открытие сайта https://travis-ci.org
$ 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
Стандартная подготовка к лабораторной работе - присваиваем значения переменным
#Моё имя на Github
$ export GITHUB_USERNAME=NickTikhomirov
#Мой токен на Github
$ export GITHUB_TOKEN=****************************************
Подготовка к лабораторной работе
#Меняем директорию
$ cd ${GITHUB_USERNAME}/workspace
#Получаем название директории
$ pushd .
~/NickTikhomirov/workspace ~
#Включаем макрос, созданный в одной из предыдущих лабораторных работ
$ source scripts/activate
Установка всех необходимых компонентов для работы с travis ci
#Получили и запустили установочный bash-файл
$ \curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles
Turning on ignore dotfiles mode.
Downloading https://github.com/rvm/rvm/archive/master.tar.gz
Installing RVM to /home/Никита/.rvm/
Installation of RVM in /home/Никита/.rvm/ is almost complete:
* To start using RVM you need to run `source /home/Никита/.rvm/scripts/rvm`
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
#Пишем команду запуска rvm в файл, который мы запускаем в начале каждой лабораторной
$ echo "source $HOME/.rvm/scripts/rvm" >> scripts/activate
#Запускаем этот файл
$ . scripts/activate
#Отключение автоматического подключения библиотек
$ rvm autolibs disable
#Ставим Ruby, потому что он нужен для работы с Travis
#Несколькими командами позже я столкнулся с тем, что ruby и travis ставятся не очень охотно,
#поэтому в качестве эксперимента поставил ruby 2.5.0. Это не помогло.
$ rvm install ruby-2.4.2
Warning, new version of rvm available '1.29.7', you are using older version '1.29.7-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
Searching for binary rubies, this might take some time.
No binary rubies available for: cygwin/unknown/i386/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/Никита/.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 175k 0 0:01:10 0:01:10 --:--:-- 144k
ruby-2.4.2 - #extracting ruby-2.4.2 to /home/Никита/.rvm/src/ruby-2.4.2 - please wait
ruby-2.4.2 - #configuring - please wait
ruby-2.4.2 - #post-configuration - please wait
ruby-2.4.2 - #compiling - please wait
ruby-2.4.2 - #installing - please wait
ruby-2.4.2 - #making binaries executable - please wait
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 378k 0 0:00:02 0:00:02 --:--:-- 378k
No checksum for downloaded archive, recording checksum in user configuration.
ruby-2.4.2 - #extracting rubygems-3.0.3 - please wait
ruby-2.4.2 - #removing old rubygems - please wait
ruby-2.4.2 - #installing rubygems-3.0.3 - please wait
Error running 'env GEM_HOME=/home/Никита/.rvm/gems/ruby-2.4.2@global GEM_PATH= /home/Никита/.rvm/rubies/ruby-2.4.2/bin/ruby -d /home/Никита/.rvm/src/rubygems-3.0.3/setup.rb --no-document',
please read /home/Никита/.rvm/log/1555340135_ruby-2.4.2/rubygems.install.log
#Считать uby 2.4.2 основной версией Ruby
$ rvm use 2.4.2 --default
Using /home/Никита/.rvm/gems/ruby-2.4.2
#Ошибки, вызванные в ходе установки Ruby не дали нормально произвести следующую команду,
#поэтому я по совету товарища перешёл с использования babun на alpine wsl
#Папку workspace просто скопировал
#Удачную установку Ruby произвели с помощью команды apk add ruby-dev
#Наконец, установили travis
$ gem install travis
Building native extensions. This could take a while...
Successfully installed ffi-1.10.0
Fetching: ethon-0.12.0.gem (100%)
Successfully installed ethon-0.12.0
Fetching: typhoeus-0.8.0.gem (100%)
Successfully installed typhoeus-0.8.0
Fetching: websocket-1.2.8.gem (100%)
Successfully installed websocket-1.2.8
Fetching: json-2.2.0.gem (100%)
Building native extensions. This could take a while...
Successfully installed json-2.2.0
Fetching: pusher-client-0.6.2.gem (100%)
Successfully installed pusher-client-0.6.2
Fetching: travis-1.8.10.gem (100%)
Successfully installed travis-1.8.10
ERROR: While executing gem ... (Gem::DocumentError)
RDoc is not installed: cannot load such file -- rdoc/rdoc
Подготовка к оформлению лабораторной работы
#Скачиваем lab03 с github в создаваемую projects/lab04
$ git clone https://github.com/${GITHUB_USERNAME}/lab03 projects/lab04
Cloning into 'projects/lab04'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 21 (delta 3), reused 21 (delta 3), pack-reused 0
Unpacking objects: 100% (21/21), done.
#Переход в папку
$ cd projects/lab04
#Убираем привязанный прежде git
$ git remote remove origin
#Устанавливаем новый git
$ git remote add origin https://github.com/${GITHUB_USERNAME}/lab04
Пишем в файл travis.yml указание на используемый язык
$ cat > .travis.yml <<EOF
language: cpp
EOF
Пишем в файл travis.yml выполняющиеся команды
$ cat >> .travis.yml <<EOF
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 NickTikhomirov!
Вызвали команду проверки конфига
$ travis lint
Warnings for .travis.yml:
[x] value for addons section is empty, dropping
[x] in addons section: unexpected key apt, dropping
Дописали в файл README.md значок, который сгенерировали в трависе
#Заменил на sed -i '1i [](https://travis-ci.org/NickTikhomirov/lab04)' README.md
$ ex -sc '1i|<фрагмент_вставки_значка>' -cx README.md
Обновили гит, отправили всё на гитхаб
#Добавили в гит файл трависа, в который столько времени писали
$ git add .travis.yml
#README.md тоже добавили
$ git add README.md
#Коммит сделали
$ git commit -m"added CI"
#Отправили на репозиторий в гитхабе
$ git push origin master
Enumerating objects: 22, done.
Counting objects: 100% (22/22), done.
Delta compression using up to 4 threads
Compressing objects: 100% (18/18), done.
Writing objects: 100% (21/21), 3.14 KiB | 229.00 KiB/s, done.
Total 21 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To https://github.com/NickTikhomirov/lab04.git
1b310b9..5afab1b master -> master
Тестим команды трависа
#Снова проверка конфига
$ travis lint
/usr/lib/ruby/gems/2.5.0/gems/travis-1.8.10/lib/travis/tools/system.rb:79: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
Warnings for .travis.yml:
[x] value for addons section is empty, dropping
[x] in addons section: unexpected key apt, dropping
#Информация о моих аккаунтах (всего один)
$ travis accounts
/usr/lib/ruby/gems/2.5.0/gems/travis-1.8.10/lib/travis/tools/system.rb:79: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
NickTikhomirov (Nicktikhomirov): subscribed, 6 repositories
#Обновились - синхронизировались
$ travis sync
/usr/lib/ruby/gems/2.5.0/gems/travis-1.8.10/lib/travis/tools/system.rb:79: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
synchronizing: ... done
#Списки моих репозиториев
$ travis repos
/usr/lib/ruby/gems/2.5.0/gems/travis-1.8.10/lib/travis/tools/system.rb:79: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
NickTikhomirov/Storagehouses (active: no, admin: yes, push: yes, pull: yes)
Description: BMSTU hometask #2.1
NickTikhomirov/lab00 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение систем обмена данными
NickTikhomirov/lab01 (active: no, admin: yes, push: yes, pull: yes)
Description: Изучение утилит для разработки проектов
NickTikhomirov/lab02 (active: no, admin: yes, push: yes, pull: yes)
Description: ???
NickTikhomirov/lab03 (active: no, admin: yes, push: yes, pull: yes)
Description: ???
NickTikhomirov/lab04 (active: yes, admin: yes, push: yes, pull: yes)
Description: ???
#Включение репозитория
$ travis enable
/usr/lib/ruby/gems/2.5.0/gems/travis-1.8.10/lib/travis/tools/system.rb:79: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
Detected repository as NickTikhomirov/lab04, is this correct? |yes| y
NickTikhomirov/lab04: enabled :)
#Список недавно обновлённого
$ travis whatsup
DESKTOP-VVML62H:/mnt/c/workspace/projects/lab04$ travis whatsup
/usr/lib/ruby/gems/2.5.0/gems/travis-1.8.10/lib/travis/tools/system.rb:79: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
NickTikhomirov/lab04 passed: #1
#Список сборок по веткам
$ travis branches
/usr/lib/ruby/gems/2.5.0/gems/travis-1.8.10/lib/travis/tools/system.rb:79: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
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/NickTikhomirov/lab04/compare/1b310b909778...5afab1b06de2
Duration: 51 sec
Started: 2019-05-09 19:20:47
Finished: 2019-05-09 19:21:38
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