Каталог решений - Автоматизируем процедуру обновления xddTestRunner с помощью Jenkins

Автоматизируем процедуру обновления xddTestRunner с помощью Jenkins

Автоматизируем процедуру обновления xddTestRunner с помощью Jenkins

В наличии

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

Категория:

Описание

Для тестирования мы используем замечательный open source инструмент xUnitFor1C. Он позволяет запускать тесты не только интерактивно, но и в пакетном режиме, заблаговременно сохраняя результаты в xml–файл, который понимает плагин JUnit для Jenkins. Все бы ничего, но разработка в проекте идет настолько активно, что редко успеваешь вовремя обновляться, то ли из-за большой лени, то ли из-за большого потока текучки. Вот я и решил немного автоматизировать процесс обновления обработки xddTestRunner.epf. Ну а чего, Jenkins умный, пускай сам о себе позаботится.

Для успешного выполнения задания нам понадобятся следующие инструменты: непосредственно сам Jenkins (предварительно сконфигурированный для работы с git), и установленный Python версии 3.4 и выше. Наш план таков:

Jenkins получает новые файлы из репозитория. После их получения специальный скрипт на Python сравнивает уже существующий файл и новый. Если есть различия – свежая версия xddTestRunner подменяет старую, а пользователям в slack-чат отправляется уведомление об обновлении файла из ссылкой на новую версию.

Давайте посмотрим на настройки Jenkins. Здесь ничего особенного. В разделе Source Code Managment установлена ссылка на репозиторий и ветка, которую будем загружать.

Настройки удаленного репозитория

Следующий раздел, который нам необходимо заполнить – Build. В нем мы должны заполнить секцию «Execute Windows batch command», которая позволяет запускать наш скрипт сравнения файлов.

Раздел Build

Настройка Jenkins окончена. Давайте рассмотрим наш скрипт, который будет сравнивать, подменять файлы и отправлять сообщения в Slack.

Первая важная функция – отправка оповещения в чат. Взял я ее отсюда. Приведем листинг кода.


def get_connection(organization):
    return http.client.HTTPSConnection('{0}.slack.com'.format(organization))

def get_url(token):
  return '/services/hooks/incoming-webhook?token={0}'.format(token)

def post_message(connection, url, urltofile):

    headers = {'Content-Type': 'application/json'}
    color = 'good'
    text = 'Внимание вышла новая версия обработки xddTestRunner <' + urltofile + '|Скачать>.'

    message = {
        'username': 'TestRunnerChecker',
        "channel": "#1c",
        "icon_emoji": ":ghost:",
        'fallback': text,
        'pretext': text,
        'color': color
    }

    connection.request('POST', url, json.dumps(message), headers)
    response = connection.getresponse()
    print(response.read().decode())

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

if not filecmp.cmp(namespace.repofile, namespace.destfile):
        shutil.copy(namespace.repofile, os.path.dirname(namespace.destfile))
        send_message(URL)

В результате мы получаем вот такое симпатичное сообщение(файл автоматически закачивается в нужный каталог на build-сервере).

Сообщение в Slack-чат

Вот как-то так. Буду рад конструктивной критике. Оригинал статьи.

has been added to your cart:
Оформление заказа