Сайт сервиса довольно функционален и позволяет проводить автоматические
тесты/сборки легко и непринуждённо.
Но он больше подходит для ситуаций когда под рукой нет любимого терминала.
А вот когда мы в своём амплуа, хочеться работать по полной!
Для этого и создан консольный клиент который стирает границы
между CI сервисом и вашей средой обитания созидания.
Source code: https://github.com/slivu/cibox
IRC: #cibox on irc.freenode.net
Статья про сам сервис
$ 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
оглавление↑
Setup
cibox
делает две простые вещи:
- синхронизирует содержимое текущей папки с вашим CIBox аккаунтом
- выполняет нужные команды на удалённой машине и представляет результат
Для правильной работы ему нужны некоторые конфигурационные файлы:
-
user
— ваш GitHub username.
Нужно хотя-бы раз залогиниться на CIBox.org чтобы ваш аккаунт был создан. -
repo
— имя CIBox репозитория в котором будет загружено содержимое текущей папки
и происходить автоматические тесты. -
lang
— язык на котором текущий репозиторий работает. -
versions
— версии языка на которых нужно производить тесты. -
commands
— комманды для автоматизации выполнения тестов. -
exclude
— файлы/папки которые следует пропустить при загрузке текущей папки на сервер.
Данные файлы будут браться из трёх мест:
- папка переданная через первый аргумент
-
.cibox/
— в текущей папке -
.cibox/
— в вашей домашней директории
При том что финальный конфиг может содержать файлы из разных директорий.
Так например можно(нужно) установить user
в домашней директории
и тогда все репозитории(в которых не установлен user
) будут использовать user
из домашней директории.
оглавление↑
Get Started
Для начала работы нужно добавить SSH ключ в ваш CIBox аккаунт(для генерации SSH ключа смотрим сюда: https://help.github.com/articles/generating-ssh-keys)
Открываем CIBox.org в браузере, логин и в меню 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
Довольно хорошо но для автоматизации недостаточно.
Едем дальше.
оглавление↑
Repos
Для того чтобы сервис знал с каким репозиторем мы работаем на данный момент
надо установить repo
файл в текущей директории.
Но для начала нам надо попасть в директорию в которой есть что тестировать.
Для примера я создам клон Espresso Framework
$ 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
...
Теперь для того чтобы подготовить репозиторий к тестам нужно информировать сервис о родном языке репозитория.
оглавление↑
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
!
Автоматизацией даже не пахнет.
Всё правильно, едем дальше.
оглавление↑
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 картины не хватает версионости.
Исправляем ситуацию.
оглавление↑
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 очень ценен.
оглавление↑
Source code: https://github.com/slivu/cibox
IRC: #cibox on irc.freenode.net
Статья про сам сервис
Автор: slivu