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

в 4:30, , рубрики: continuous integration, node.js, nodejs, python, ruby, testing, метки: , , , , , ,

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

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

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

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


Оглавление

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


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
оглавление

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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js