- PVSM.RU - https://www.pvsm.ru -

Консольный клиент для CIBox сервиса — In CI We Trust

Сайт сервиса [1] довольно функционален и позволяет проводить автоматические
тесты/сборки легко и непринуждённо.

Но он больше подходит для ситуаций когда под рукой нет любимого терминала.

А вот когда мы в своём амплуа, хочеться работать по полной!

Для этого и создан консольный клиент который стирает границы
между CI сервисом и вашей средой обитания созидания.


Оглавление

Source code: https://github.com/slivu/cibox [9]
IRC: #cibox on irc.freenode.net
Статья про сам сервис [10]


Install

$ wget  -O /usr/local/bin/cibox https://raw.github.com/slivu/cibox/master/bin/cibox
$ chmod +x /usr/local/bin/cibox

Можно конечно использовать любой другой путь вместо /usr/local/bin/
главное чтобы этот путь был в вашем $PATH
оглавление [11]

Setup

cibox делает две простые вещи:

  • синхронизирует содержимое текущей папки с вашим CIBox аккаунтом
  • выполняет нужные команды на удалённой машине и представляет результат

Для правильной работы ему нужны некоторые конфигурационные файлы:

  • user — ваш GitHub username.
    Нужно хотя-бы раз залогиниться на CIBox.org [1] чтобы ваш аккаунт был создан.
  • repo — имя CIBox репозитория в котором будет загружено содержимое текущей папки
    и происходить автоматические тесты.
  • lang — язык на котором текущий репозиторий работает.
  • versions — версии языка на которых нужно производить тесты.
  • commands — комманды для автоматизации выполнения тестов.
  • exclude — файлы/папки которые следует пропустить при загрузке текущей папки на сервер.

Данные файлы будут браться из трёх мест:

  • папка переданная через первый аргумент
  • .cibox/ — в текущей папке
  • .cibox/ — в вашей домашней директории

При том что финальный конфиг может содержать файлы из разных директорий.
Так например можно(нужно) установить user в домашней директории
и тогда все репозитории(в которых не установлен user) будут использовать user из домашней директории.
оглавление [11]

Get Started

Для начала работы нужно добавить SSH ключ в ваш CIBox аккаунт(для генерации SSH ключа смотрим сюда: https://help.github.com/articles/generating-ssh-keys [12])
Открываем CIBox.org [1] в браузере, логин и в меню SSH Keys > authorized_keys добавляем свой ключ.

Далее открываем терминал и набираем:

ssh [user]@cibox.org

Пример:

$ ssh slivu@cibox.org

slivu, Welcome to CIBox!
You did correctly setup your environment.
...

Теперь чтобы начать использовать cibox клиент нужно всего лишь установить user файл.
Обычно устанавливаеться в домашней директории.

Пример:

$ mkdir -p ~/.cibox
$ echo slivu > ~/.cibox/user

После этого можно начать работать.

Пример:

$ cibox ruby -v

--- default ---

ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]

$ cibox ruby versions
1.8.7-p370
1.9.2-p320
1.9.3-p194
2.0.0-dev
jruby-1.6.8-18mode
jruby-1.6.8-19mode
jruby-1.7.0-rc1-18mode
jruby-1.7.0-rc1-19mode
rbx-2.0.0-dev-18mode
rbx-2.0.0-dev-19mode
ree-1.8.7-2012.02

$ cibox gem list

--- default ---

bluecloth (2.2.0)
builder (3.1.3)
bundler (1.2.1)
commonjs (0.2.6)
cucumber (1.2.1)
...

Node.JS конечно тоже часть меню:

$ cibox node -v

--- default ---

v0.8.11


$ cibox node versions
0.6.21
0.8.11
0.9.2

$ cibox npm -g ls

--- default ---

/home/slivu/npm/lib
└── (empty)

И всё это залить компотом Python-ом!

$ cibox python -V

--- default ---

Python 2.7.3

$ cibox python versions
Jython-2.5.3
pypy-1.9
Python-2.5.6
Python-2.6.7
Python-2.7.3
Python-3.2.3

$ cibox pip freeze

--- default ---

distribute==0.6.28
wsgiref==0.1.2

Довольно хорошо но для автоматизации недостаточно.

Едем дальше.
оглавление [11]

Repos

Для того чтобы сервис знал с каким репозиторем мы работаем на данный момент
надо установить repo файл в текущей директории.

Но для начала нам надо попасть в директорию в которой есть что тестировать.

Для примера я создам клон Espresso Framework [13]

$ git clone git://github.com/slivu/espresso.git
Cloning into 'espresso'...
remote: Counting objects: 769, done.
remote: Compressing objects: 100% (387/387), done.
remote: Total 769 (delta 401), reused 698 (delta 330)
Receiving objects: 100% (769/769), 194.93 KiB, done.
Resolving deltas: 100% (401/401), done.

Теперь у нас есть подопытный кролик, будем эксперименты проводить :)evil

$ cd espresso
$ ls
CRUD.md   Gemfile   LICENSE   Rakefile  Setup.md  Workflow.md lib
Deploy.md Intro.md  README.md Routing.md  ViewAPI.md  e.gemspec test

Задаём имя репозиторию:

$ mkdir .cibox
$ echo espresso > .cibox/repo

и загружаем его на свой CIBox аккаунт:

$ cibox push
building file list ... done
./
.travis.yml
.yardopts
CRUD.md
Deploy.md
Gemfile
Intro.md
LICENSE
...

Теперь для того чтобы подготовить репозиторий к тестам нужно информировать сервис о родном языке репозитория.
оглавление [11]

Lang

Для того чтобы сервис знал на каком языке бормочит работает репозиторий,
надо установить lang файл:

$ echo ruby > .cibox/lang

Теперь можно подготовить репозиторий для тестов:

$ cibox bundle

--- default ---

Fetching gem metadata from http://rubygems.org/...
Fetching gem metadata from http://rubygems.org/..
Using rake (0.9.2.2)
Installing rack (1.4.1)
Installing appetite (0.0.5)
Using tilt (1.3.3)
Using e (0.1.1) from source at /home/slivu/repos/espresso
Using haml (3.1.7)
Installing sonar (0.1.0)
Installing specular (0.1.1)
Using bundler (1.2.1)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

И наконец-то тесты!

$ cibox rake test:core

--- default ---

**
Testing Core ...

---
Specs:       23
Tests:       56
Assertions:  250

$ cibox rake test:view

--- default ---

**
Testing View API ...

---
Specs:       10
Tests:       105
Assertions:  147

Всё отлично, но постоянно набирать одни и те-же команды?
Да ещё при том что надо перед каждой командой печатать cibox!
Автоматизацией даже не пахнет.

Всё правильно, едем дальше.
оглавление [11]

Commands

Для полной автоматизации нам надо сообщить сервису список команд.
Делаеться это через commands файл.

$ echo push > .cibox/commands
$ echo rake test:core >> .cibox/commands
$ echo rake test:view >> .cibox/commands
$ echo rake test:helpers >> .cibox/commands

Обратите внимание — первая команда push,
так что все изменения будут синхронизироваться автоматически.

Пробуем автоматику:

$ cibox

building file list ... done
deleting Gemfile.lock
./
test/helpers/view/templates/

sent 5988 bytes  received 1082 bytes  4713.33 bytes/sec
total size is 520345  speedup is 73.60

--- default ---

**
Testing Core ...

---
Specs:       23
Tests:       56
Assertions:  250

--- default ---

**
Testing View API ...

---
Specs:       10
Tests:       105
Assertions:  147

--- default ---

**
Testing Helpers ...

---
Specs:       3
Tests:       29
Assertions:  89

Есть!

Но подождите, такое чувство что чего-то не хватает…

Всё правильно, для полноты CI картины не хватает версионости.

Исправляем ситуацию.
оглавление [11]

Versions

По умолчанию сервис проводит тесты на дефолтной версии заданного языка.

Мы можем красиво попросить чтобы тесты проводились на разных версиях.

Для этого создаём versions файл и кладём туда нужные версии.

Но для начала смотрим список доступных версий:

$ cibox ruby versions

1.8.7-p370
1.9.2-p320
1.9.3-p194
2.0.0-dev
jruby-1.6.8-18mode
jruby-1.6.8-19mode
jruby-1.7.0-rc1-18mode
jruby-1.7.0-rc1-19mode
rbx-2.0.0-dev-18mode
rbx-2.0.0-dev-19mode
ree-1.8.7-2012.02

Теперь добавляем нужные нам версии:

$ echo 1.8.7-p370  > .cibox/versions
$ echo 1.9.2-p320 >> .cibox/versions
$ echo 1.9.3-p194 >> .cibox/versions
$ echo 2.0.0-dev  >> .cibox/versions

Или просто открываем файл в любимом редакторе.

Далее момент истины:

$ cibox
building file list ... done
test/helpers/view/templates/

sent 5982 bytes  received 1076 bytes  4705.33 bytes/sec
total size is 520345  speedup is 73.72

--- 1.8.7-p370 ---
...
--- 1.9.2-p320 ---
...
--- 1.9.3-p194 ---
...
--- 2.0.0-dev ---
...

И вуаля, выбранные версии в действии!

И на этом пока всё.

Спрашивайте, ваш feedback очень ценен.
оглавление [11]

Source code: https://github.com/slivu/cibox [9]
IRC: #cibox on irc.freenode.net
Статья про сам сервис [10]

Автор: slivu


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ruby/16767

Ссылки в тексте:

[1] Сайт сервиса: http://cibox.org

[2] Install: #install

[3] Setup: #setup

[4] Get Started: #get_started

[5] Repos: #repos

[6] Lang: #lang

[7] Commands: #commands

[8] Versions: #actions

[9] https://github.com/slivu/cibox: https://github.com/slivu/cibox

[10] Статья про сам сервис: http://habrahabr.ru/post/153097

[11] оглавление: #top

[12] https://help.github.com/articles/generating-ssh-keys: https://help.github.com/articles/generating-ssh-keys

[13] Espresso Framework: https://github.com/slivu/espresso