Skip to content

Instantly share code, notes, and snippets.

@NickTikhomirov
Created May 13, 2019 01:11
Show Gist options
  • Save NickTikhomirov/6995aab12faf3a3a8ceec21d6ce2d841 to your computer and use it in GitHub Desktop.
Save NickTikhomirov/6995aab12faf3a3a8ceec21d6ce2d841 to your computer and use it in GitHub Desktop.
lab04

Laboratory work IV

Данная лабораторная работа посвещена изучению систем непрерывной интеграции на примере сервиса Travis CI

Открытие сайта https://travis-ci.org

$ open https://travis-ci.org

Tasks

  • 1. Авторизоваться на сервисе Travis CI с использованием GitHub аккаунта
  • 2. Создать публичный репозиторий с названием lab04 на сервисе GitHub
  • 3. Ознакомиться со ссылками учебного материала
  • 4. Включить интеграцию сервиса Travis CI с созданным репозиторием
  • 5. Получить токен для Travis CLI с правами repo и user
  • 6. Получить фрагмент вставки значка сервиса Travis CI в формате Markdown
  • 7. Выполнить инструкцию учебного материала
  • 8. Составить отчет и отправить ссылку личным сообщением в Slack

Tutorial

Стандартная подготовка к лабораторной работе - присваиваем значения переменным

#Моё имя на 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 [![Build Status](https://travis-ci.org/NickTikhomirov/lab04.svg?branch=master)](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

Report

$ 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}"

Homework

Вы продолжаете проходить стажировку в "Formatter Inc." (см подробности).

В прошлый раз ваше задание заключалось в настройке автоматизированной системы CMake.

Сейчас вам требуется настроить систему непрерывной интеграции для библиотек и приложений, с которыми вы работали в прошлый раз. Настройте сборочные процедуры на различных платформах:

  • используйте TravisCI для сборки на операционной системе Linux с использованием компиляторов gcc и clang;
  • используйте AppVeyor для сборки на операционной системе Windows.

Links

Copyright (c) 2015-2019 The ISC Authors
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment