IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Rational  >

Использование встроенных механизмов интеграции IBM Rational ClearCase с нестандартными средствами разработки ПО и встроенными системами

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Обсудить


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: средний

Рустам Зайдуллин, ведущий инженер, ТатАСУнефть" ОАО "Татнефть"
Александр Новичков, руководитель отдела внедрения и консалтинга, СМ-Консалт

27.02.2009

При внедрении систем управления конфигурациями на первых же этапах возникает вопрос интеграции с используемыми средствами разработки. Для наиболее продуктивного применения инструментария версионного хранения последний должен обладать возможностью интеграции со средой разработки, дабы не усложнять процесс разработки возникающими операциями создания новых версий в хранилище. Большинство современных средств разработки программного обеспечения обладает встроенными интерфейсами интеграции, поддерживающими определённый набор инструментов версионного хранения (ClearCase, CVS, PCVS и т.д.). Сложнее обстоит дело с нестандартными средствами разработки. Для интеграции таких инструментов необходимы возможности разработки уникальных решений в кратчайшие сроки, без отвлечения основных ресурсов от решения задач бизнеса. IBM Rational ClearCase обладает достаточным набором необходимых возможностей – это и встроенный API, открывающий возможности создания полноценных интеграционных решений, и встроенный интерпретатор языка программирования ccperl, служащий платформой для разработки скриптов и дающий практически неограниченные возможности для расширения функционала ClearCase, и, естественно, интерпретатор командной строки cleartool, который, собственно, и выполняет все операции с элементами версионного хранилища, являясь основным инструментом администратора ClearCase. Кроме того, ClearCase обладает такими приятными дополнениями как интерпретаторы clearprompt и cleardlg, посредством команд которых вызываются стандартные GUI-диалоги и разрабатываются собственные. В данной статье мы описываем выполнение интеграции инструмента управления конфигурациями IBM Rational ClearCase со средой разработки отчётности, выполненной в корпоративной информационной системе.

Описание проблемы

В ходе внедрения дисциплины УК мы столкнулись с необходимостью интегрировать инструмент разработки отчётов одной из корпоративных информационных систем с ClearCase. Отчёты представляли собой набор файлов, описывающих строки, формулы расчёта и заголовочный файл. Таким образом, версия отчёта является набором файлов, число которых зависит от состава отчёта. Отчёты редактируются непосредственно в базе данных системы с использованием модуля редакции отчётов, для отладки используется тестовая версия базы данных. До внедрения ClearCase для сохранения промежуточных версий разработчики выгружали исходный код отчёта на свои рабочие станции, создавая структуру каталогов под каждый отчёт, с делением на подкаталоги для версий отчётов. Идентификаторами версий служили пометки о дате релиза, описание версий велось в тетрадях.

Для организации версионного хранения в ClearCase необходимо было разработать интеграционное решение, позволяющее с минимальной затратой времени сохранить версию отчёта в версионном хранилище с присвоением версиям файлов идентификаторов и описания версии и, что самое главное, оперативно восстановить нужную версию. Оптимальным решением, удовлетворяющим выдвинутым условиям, была разработка скриптов для создания и проставления меток на вновь созданные версии, а также последующего поиска версий по метке и вывода их в состояние CheckedOut. Для упрощения вызова скриптов необходимо было разработать диалоговые формы ввода необходимой информации – типы создаваемых меток, их описания, тип метки для поиска версии – и привязать разработанные скрипты к контекстному меню ClearCase.

Описание решения

Все скрипты разработаны на встроенном языке ccperl, для обращения к элементам версионного хранилища используется интерпретатор команд cleartool, для выполнения операций с элементами в графическом режиме – cleardlg, для вывода диалоговых форм – clearprompt.

Ниже приводится описание разработанных скриптов и настройки контекстного меню ClearCase.



В начало


Описание скриптов

Интеграция реализована в виде трёх скриптов, автоматизирующих основные операции сохранения версии отчёта в хранилище и отката к нужной версии:

  • скрипт перевода в состояние CheckedOut определённой версии каталога версионного хранилища вместе с содержимым. Выполняется при необходимости восстановить версию отчёта по названию и описанию метки. При инициации скрипта производится поиск в каталоге всех типов меток, проставленных на элементы каталога и вывод диалогового окна выбора метки из списка всех обнаруженных. Вместе с именами меток выводятся их описания (рисунок 1);

    Рисунок 1
    Рисунок 1

  • скрипт перевода в состояние CheckedIn каталога и всех вложенных элементов с присвоением создаваемой версии метки. Выполняется после сохранения в версионном хранилище новой версии отчёта. Запрос характеристик метки производится в начале выполнения скрипта, при этом в диалоговом окне создания нового типа метки приводятся названия меток, проставленных на прежние версии. Выполняется поиск и внесение под версионное хранение добавленных в новой версии файлов (рисунок 2);

    Рисунок 2
    Рисунок 2

  • скрипт перевода в состояние CheckedOut текущей версии каталога и его содержимого. Выполняется перед сохранением новой версии отчёта в версионном хранилище. При выполнении скрипта вызывается стандартная форма ClearCase для ввода комментария к выполняемой операции с возможностью применения его ко всем выбранным элементам.

Все скрипты привязаны к командам контекстного меню и выводятся только при вызове меню для каталогов в соответствии с их текущим состоянием, т.е. если каталог находится в состоянии CheckedIn, то кроме стандартных пунктов в контекстном меню будут отображены действия перевода в состояние CheckedOut для отображаемой версии и версии по имени метки. Эта настройка выполнена инструментом редактирования контекстного меню.

При создании новой команды в контекстном меню указывается объект, для которого она будет отображаться – каталог, состояние объекта, например, CheckedIn, название команды в меню, текст подсказки к пункту, сама выполняемая команда – путь к файлу скрипта, и служебная информация, например, текущая директория и передаваемый аргумент. На рисунке 3 показано окно ClearCase Context Menu Editor для созданной команды CheckOut версии отчёта.


Рисунок 3. Настройка контекстного меню
Рисунок 3. Настройка контекстного меню

Далее следует более подробное рассмотрение всех скриптов с листингами, комментариями и изображениями выводимых форм.

CheckOut каталога и его содержимого – выведение в состояние CheckedOut каталога и его содержимого. Скрипт выполняется перед выгрузкой из базы данных новой версии отчёта. Так как скрипт использует команды интерпретатора cleardlg, выводимое окно имеет стандартный вид (рисунок 4).


Рисунок 4. Диалоговое окно ClearCase
Рисунок 4. Диалоговое окно ClearCase

Листинг этого скрипта приведён полностью.

Сохраняем в переменной передаваемый параметр – путь к обрабатываемому каталогу:

$path=@ARGV[0];

Определяем переменную для хранения путей к элементам версионного хранилища:

$filez="";

Составляем список файлов, содержащихся в каталоге. Для этого используем подпрограмму, обрабатывающую «выхлоп», полученный в результате отработки команды find интерпретатора командной строки cleartool:

$DoCom="cleartool find \"$path\" -print "; 
DoCommand($DoCom); 

Передаём в консоль команду вызова графических диалогов ClearCase для выполнения операции CheckOut:

$string="cleardlg /checkout $filez ";
system(" $string ");

Далее – процедура обработки «выхлопа», получаемого после выполнения команд в консоли:

sub DoCommand
{
my $cmd = shift;
my $line;
open(CMD, "$cmd 2>&1 |");
foreach $line (<CMD>)
{
    chop $line;
    $line=~ tr(/\/)(////);
    $temp="$filez  \"$line\" ";
    $filez=$temp;
};
close CMD;
}# end DoCommand

CheckIn каталога и его содержимого, операции с меткой – в скрипте выполняется запрос параметров создаваемого типа метки, сохранение новой версии отчёта (перевод каталога и его содержимого в состояние CheckedIn) с присвоением новым версиям элементов вновь созданной метки.

При выполнении скрипта у пользователя запрашивается название для метки, которая будет проставлена на сохраняемую версию (рисунок 5)


Рисунок 5. Диалог ввода названия метки
Рисунок 5. Диалог ввода названия метки

и описание для неё (рисунок 6).


Рисунок 6. Диалог ввода описания метки
Рисунок 6. Диалог ввода описания метки

Далее приводим фрагменты скрипта для выполнения ключевых моментов операции.

При запросе имени метки в диалоговом окне выводится список имеющихся меток в каталоге. Формирование этого списка производим следующим образом.

Вызываем команду lsvtree (отображение древа версий – в текстовом формате – текущего каталога). Обработка результата выполнения команды выполняется уже знакомой процедурой:

$findlbtype="cleartool lsvtree -a \"$path\"";
DoCommand($findlbtype);

Результат – многострочный текст – преображаем в массив для удобства обработки:

@rezmas=split(/\n/,$rez);
$rez="";

Результат выполнения команды lsvtree – отчёт о версиях элемента хранилища, в котором все названия меток на версии перечислены через запятую и взяты в скобки. По этому признаку выделяем фрагменты отчёта с названиями меток и собираем в одну строку:

foreach $line (@rezmas) {
    $n=index($line, ")");
    $m=index($line, "(");
    if ($n > 0) {
        $line=substr($line,$m+1,$n-1);
        chop($line);
        $labels=$labels.",".$line;
    };
};

В результате получаем переменную $labels, содержащую список всех найденных меток. Последней командой отсекаем впереди идущую запятую:

$labels=substr($labels,1,length($labels));

Далее описываем формирование диалоговых окон, используемых для ввода характеристик меток.

Непосредственно вывод диалога командой clearprompt (см. рисунок 5). В тексте запроса использована переменная с названиями меток:

prompt: $string="clearprompt text -outfile labeln -prompt 
              \"Введите название метки. Предыдущие: $labels\"";

Для обработки результата работы диалога записываем его в переменную:

$lab=system(" $string ");

Если в диалоговом окне была нажата кнопка отмены – завершаем работу скрипта:

if ($lab != 0) {
    Win32::MsgBox("Операция прервана пользователем");
    exit(1);
};

Если при редактировании отчёта были сформированы новые файлы (это происходит при изменении структуры отчёта и добавлении новых скриптов), необходимо внести их под версионный контроль. Для этого выполняем поиск приватных файлов, определяем тип для создаваемого элемента, и, собственно, создаём из них элемент версионного хранилища. Команда lsprivate выводит список приватных файлов в текущем View текущего версионного хранилища:

$listprivate="$path cleartool lsprivate";
DoCommand($listprivate);
@filez=split(/\n/,$filez);

Так как lsprivate выводит список приватных файлов по всему хранилищу, необходимо отсеять из найденных файлов те, которые не отвечают следующим условиям: расположены вне каталога обновляемого отчёта и имеют тип файла, отличный от типов файлов отчёта. Тип файла также необходим и при создании нового элемента версионного хранилища:

foreach $file (@filez) {
    if (($file=~".xml")&&($file=~$path)) {
        system("cleartool mkelem –nc -nco –eltype xml $file ");
    };
    if ((($file=~".aqs") || ($file=~".aqs"))&&($file=~$path)) {
        system("cleartool mkelem –nc -nco –eltype text_file $file ");
    };
};

Получив все нужные данные и поместив в версионное хранилище добавленные в отчёт файлы, выполняем операцию CheckIn для всех файлов в графическом режиме:

system("cleardlg /checkin /identical $filez ");

После этого проставляем метку на вновь созданные версии элементов:

system("cleartool find \"$path\" -print -exec 
           \"cleartool mklabel $label %CLEARCASE_PN%\"");

CheckOut версии отчёта – выполняется поиск всех типов меток, проставленных на элементы в каталоге, вывод диалога выбора версии (по метке с описанием), выборка версий по типу метки и перевод их в состояние CheckedOut (рисунок 7).


Рисунок 7. Диалог выбора версии
Рисунок 7. Диалог выбора версии

Формирование списка меток элементов каталога мы привели выше, а здесь остановимся на получении описаний меток, которые нужны для большего удобства при определении искомой версии.

Имея список меток каталога, поднимаем описания каждой из них. Для этого формируем массив, каждый элемент которого содержит название одной метки:

@labels=split(/,/,$labels);
foreach $line (@labels) {

Команда desc выводит информацию по метке, в том числе и её текстовое описание:

    $descr="cleartool desc lbtype:$line";
    DoCommand($descr);
    @rezmas2=split(/\n/,$rez);

Так как комментарий к метке начинается со второй строки описания, копируем её в переменную

    $description=@rezmas2[2];

Заменяем кавычки и запятые на другие символы (кавычки и символы помешают при вызове диалога выбора метки):

    $description=~ tr/"/>/;
    $description=~ tr/,/ /;
    $i=length($description);

Отсекаем первые два символа – из-за форматирования отчёта по метке там пробелы:

    $description=substr($description,2,$i);

Если у метки нет текстового описания – комментария, в переменную попадает информация о принадлежности метки к реплике. Распознаём такие строки по слову master и пишем пустой комментарий:

    if ($description=~"master") {
        $description="";
    };

Сохраняем в переменной названия и описания всех меток каталога:

    $line1=$line.$description;
    $rez1="$rez1"."$line1".","; 
};

Для вывода диалога выбора из списка (см. рисунок 7) используем команду clearprompt с ключом list:

prompt: $lab=system("clearprompt list -outfile $filep -items
            \"$rez1\" -prompt \"Выберите метку\"");
if ($lab != 0)
{
    Win32::MsgBox("Операция прервана пользователем");
    exit(1);
};

И, наконец, выполнение CheckOut для выбранной версии отчёта. Выполняем поиск версий элементов с указанной меткой:

$search="cleartool find \"$path\" -version lbtype($label) -print";
DoCommand($search);
@rezmas=split(/\n/,$rez);

и CheckOut для найденных версий. В этом случае уже не поднимаем графический интерфейс cleardlg, а используем cleartool:

foreach $version (@rezmas)
{
    system("cleartool checkout -c 
	           \"Скрипт интеграции редактора отчётов с ClearCase\"
			    -version -nwarn \"$version\" ");
};



В начало


Заключение

Интеграционное решение выполнено на встроенном языке ccperl, использованы команды интерпретаторов cleartool, cleardlg, clearprompt. Разработанные скрипты размещены на сервере ClearCase в каталоге с общим доступом. Для вызова скриптов настроено контекстное меню.

Весь цикл разработки решения – от описания концепции до передачи в эксплуатацию – занял семь рабочих дней, решение было реализовано одним специалистом.

Это только один из возможных вариантов выполнения интеграции. В нашей практике мы выполняли также интеграцию средства разработки с ClearCase на уровне API, используя библиотеку CAL. Но в этой статье мы описали именно вариант без вмешательства в код системы.



Об авторах

Зайдуллин Рустам работает в области информационных технологий с 2005 года. Имеет опыт адаптации и внедрения RUP и инструментальных средств IBM Rational. Сертифицированный специалист по следующим продуктам: IBM Rational ClearCase, Microsoft Project 2003. Является ведущим инженером группы контроля качества процессов разработки программного обеспечения управления "ТатАСУнефть" ОАО "Татнефть".


Новичков Александр работает в области информационных технологий с 1994 года. Является руководителем отдела консалтинга и внедрения IBM Rational. Участвовал более чем в 20 успешных проектах внедрения IBM Rational в таких организациях как Банк внешней торговли, ОАО «Татнефть», Национальный банк «ТРАСТ», Банк «Русский стандарт», ОАО «Иркут Авиа», ЗАО «АйТи», ЗАО «Аплана», Сбербанк России, Центральный банк Российской Федерации, ОАО «Русский алюминий» и многих других. Имеет более 30 публикаций научных и научно-популярных материалов. Является сертифицированным специалистом по следующим продуктам IBM Rational: ClearCase for Windows, ClearQuest for Windows и UCM Essentials. За время работы в консалтинге им обучено более 500 специалистов ведущих IT-компаний России и СНГ. Является руководителем отдела внедрения и консалтинга в компании СМ-Консалт (www.cmcons.com). Связаться с ним можно по адресу rational.tools.info@gmail.com




Выскажите мнение об этой странице


Пожалуйста, найдите минутку и заполните форму, чтобы повысить уровень сервиса.



 


 


 


Поделиться этой статьей:

забобрить забобрить memori сохранить в memori




В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.
    IBM в России Конфиденциальность Контакты