Объявление

Свернуть
Пока нет объявлений.

скриптинг 2. контроль версий. загрузка скриптов. Svn.

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • скриптинг 2. контроль версий. загрузка скриптов. Svn.

    Интеграция Omnitracker требует редактирования большого количества скриптов, тем более когда над базой работает комманда разработчиков.
    Всё это необходимо контролировать и следить за изменениями. С этой целью программисты придумали Subversion - систему контроля версий.
    В Omnitracker'е же программировать приходится, но следить за изменениями кода встроенными средствами невозможно (а их и нет ).
    Но скрипт в базе Omnitracker - это объект! А значит его можно оттуда извлечь
    Таким образом, был разработан скрипт на vbs по извлечению скриптов OT и раскладыванию их по папочкам себе на жесткий диск. Всё это связано с SVN - а значит, мы получаем контроль версий скриптов Omnitracker.
    Про SVN можно почитать http://habrahabr.ru/blogs/pm/31651/, а здесь про установку и настройку http://habrahabr.ru/blogs/development/29440/.
    Используемый в скрипте клиент: http://tortoisesvn.net/

    Ну и сам скрипт:

    Код:
    'Автор скрипта: Терехин Сергей, terehin@gmail.com
    'Дата:             16.06.2011
    'Описание:     Скрипт выгрузки всех скриптов из Omnitracker и разложения их по папкам,
    '            в которых скрипты находятся в базе OT, затем коммит и добавление их в SVN
                 
    'Инициализация
    'Адрес сервера, Порт сервера, Имя и пароль для подключения к OT:
    ServerAdress="127.0.0.1"
    ServerPort=5085
    LoginName="superuser"
    Password="superuser"
    
    'Расположение папки в которую будут выгружаться скрипты
    ScriptsPath="D:\OT\trunk\"
    
    'Логгирование
    'Расположение лог-файла - папка в которой он лежит должна существовать
    LogFile="C:\Logs\ScriptLog.txt"
    'Необходима ли перезапись лога
    LogRewrite=True
    'Включить расширенный лог - пишет в лог все создаваемые папки и скрипты
    LogAdvanced=False
    
    'Контроль версий скриптов реализован с помощью SVN
    'Необходимо ли добавлять скрипты  в SVN
    SvnAdd=True
    'Расположение SVN-клиента. Используется TortoiseSVN
    SvnPath="C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe"
    'Путь до SVN-сервера
    SvnURL="http://localhost:8080/svn/OT/trunk"
    
    'Функция очистки путя папки или файла от спец символов
    Function ClearPath (Path)
        Path = Replace(Path,"/","-")
        Path = Replace(Path,":","-")
        Path = Replace(Path,"|","-")
        Path = Replace(Path,""""," ")
        Path = Replace(Path,">","-")
        Path = Replace(Path,"<","-")
        Path = Replace(Path,vbCr,"")
        Path = Replace(Path,vbCrLf,"")
        ClearPath = Path
    End Function
    
    'Создание объектов для работы со скриптами и с Omnitracker
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Set app = CreateObject("OtAut.OtApplication")
    Set sess = app.MakeSession(ServerAdress, ServerPort, LoginName, Password)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    'Открытие файла логов(с перезаписью или нет) или его создание
    If (objFSO.FileExists(LogFile) And Not LogRewrite)Then
        Set logFile = objFSO.OpenTextFile(LogFile,8,LogRewrite)
    Else
        Set logFile = objFSO.CreateTextFile(LogFile)
    End If
    
    'Подключаемся к папкам в OT
    Set Folders = sess.RequestFolders
    
    logFile.Write(Date() & "  "& Time() & "    Creating OT-Folders structure and downloading Scripts" & vbCr )
    
    'Создадим маркер добавления скрипта (нужно для SVN)
    ScriptAdded=False
    'Цикл который пробегается по всем папкам в OT и создает их структуру на диске. 
    'Содержит внутренний цикл, который пробегается по всем скриптам  в папке и создает текстовые файлы с
    'их содержимым в нужных папках на диске.
    For Each Folder In Folders
        'Создаем папку на диске, в случае её отсутствия
        FolderString = ScriptsPath & ClearPath(Folder.Path)
        If Not objFSO.FolderExists (FolderString) Then
            objFSO.CreateFolder(FolderString )
        End If
        'Логгируем создание папки
        If LogAdvanced Then
            logFile.Write(Date() & "  "& Time() & "    UniqueID=" & Folder.UniqueId & "    Folder=" & FolderString & vbCr )
            logFile.Write(Date() & "  "& Time() & "    __________Creating Scripts__________"& vbCr )
        End If    
        'Теперь пробегаемся по всем скриптам в папке OT
        Set Scripts = Folder.Scripts
        For Each Script In Scripts
            'Проверяем добавили ли мы новые скрипты на диск
            If Not objFSO.FileExists(FolderString &"\" & ClearPath(Script.Name) & ".txt") Then
                ScriptAdded=True
            End If
            'Перезаписываем имеющийся на диске скрипт
            Set ScriptTXT = objFSO.CreateTextFile(FolderString &"\" & ClearPath(Script.Name) & ".txt")
            ScriptTXT.Write(Script.Script)
            'Логгируем запись скриптов
            If LogAdvanced Then
                logFile.Write(Date() & "  "& Time()&"    " & FolderString &"\" & ClearPath(Script.Name) & ".txt" & vbCr )
                
            End If
        Next
    Next
    
    logFile.Write(Date() & "  "& Time() & "    All Scripts Are Created" & vbCr )
    
    
    'Заносим все изменения в SVN
    If SvnAdd Then
        Command = """" & SvnPath & """ " & "/command:update /closeonend:1 /path:" & ScriptsPath & " /url:" & SvnURL
        WshShell.Run Command,0,1
        If ScriptAdded Then
            Command = """" & SvnPath & """ " & "/command:add /closeonend:1 /path:" & ScriptsPath & " /url:" & SvnURL
            WshShell.Run Command,0,1
        End If
        Command = """" & SvnPath & """ " & "/command:commit /closeonend:1 /path:" & ScriptsPath & " /url:" & SvnURL
        WshShell.Run Command,0,1
        logFile.Write(Date() & "  "& Time() & "    SVN Updated" & vbCr )
    End If
    
    logFile.Close()
    ScriptTXT.Close()
    От вас надеюсь получить комментарии для оптимизации выполнения скрипта и естественно благодарности

  • #2
    Re: Скриптинг 2. Контроль версий. Загрузка скриптов. SVN.

    Недостатки скрипта:
    1) Не выдергивает Global Scripts
    2) Не выдергивает скрипты с форм
    Как исправить эти 2 недостатка ?

    Комментарий


    • #3
      Re: Скриптинг 2. Контроль версий. Загрузка скриптов. SVN.

      Теоретически, любой скрипт - это значение поля Script в таблице Scripts
      Если систему контроля версий можно "натравить" на данное поле (у скрипта есть уникальный ID), то можно контроллировать изменения, не выгружая скрипты в папки.
      Соответсвенно утвержденный код будет Update'ами литься обратно в базу.

      Комментарий


      • #4
        Re: Скриптинг 2. Контроль версий. Загрузка скриптов. SVN.

        Коллеги, а как в данном случае решается выгрузка условий на event-ах? например, есть скрипт, который выполняется на AfterModification при условии "инициатор = Вася Пупкин". Ведь изменение условий (rules) может привести к абсолютно иной конфигурации и логике в целом.

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

        Комментарий


        • #5
          Re: Скриптинг 2. Контроль версий. Загрузка скриптов. SVN.

          Кстати, еще есть коммент к скрипту да и вообще к скриптам внутри ОТ...

          От работает в UTF-8, это означает что он _может_ работать с Long-ASCII-символами. В половине скриптов, включая сэмплы, используется Scripting.FileSystemObject - это может привести к серьезной проблеме. Напоровшись, к примеру, на символ с кодом 8810 (красивая двойная открывающая кавычка) в письме, при попытке это письмо записать в файлик, мы получим ошибку записи в файл (я уже на это наступил). Поэтому рекомендую перейти на "ADODB.Stream".

          Например, так:
          Код:
          sub SaveBinaryData(FileName, Text)
               Const adTypeBinary = 1
               Const adTypeText = 2
               Const adSaveCreateOverWrite = 2
               Dim BinaryStream 
               Set BinaryStream = CreateObject("ADODB.Stream")
               BinaryStream.Type = adTypeBinary
               BinaryStream.Open
               With CreateObject("ADODB.Stream")
                  .Type = adTypeText
                  .Open: .WriteText Text
                  .position = 2
                  .CopyTo BinaryStream, Len(Text) * 2
                  .Close
               End With
               BinaryStream.SaveToFile FileName, adSaveCreateOverWrite
               BinaryStream.Close
               Set BinaryStream = Nothing
          end sub

          Комментарий


          • #6
            Re: Скриптинг 2. Контроль версий. Загрузка скриптов. SVN.

            Сообщение от Konic
            Коллеги, а как в данном случае решается выгрузка условий на event-ах? например, есть скрипт, который выполняется на AfterModification при условии "инициатор = Вася Пупкин".
            список actions с их условиями можно выгрузить, используя XSLT и инструмент экспорта документации - см. Файл > Администрирование > Экспорт документации

            Сообщение от Konic
            Кроме того, ну да, зафиксировали мы изменения в сабвершене, а выложили ли их в продакшен или нет? кто выложил? с кого спросить?
            Файл > Администрирование > История схемы

            но если автоматизировать, то эффективнее работать с БД, т.к. в обоих случаях это ручные операции. Или Autoit
            С уважением, Сергей Осадчий

            Комментарий


            • #7
              Re: Скриптинг 2. Контроль версий. Загрузка скриптов. SVN.

              Файл > Администрирование > Экспорт документации
              стабильный краш клиента

              с историей понял. спасибо.

              Комментарий


              • #8
                Добрый день,
                Почему, каждый раз, когда выгружаются данные из ОТ для CVN, то например, в файле шаблона формы меняется параметр id, при том, что изменений никаких в форме не было произведено? <form_definition id="307163440" name="Form1" type="object"> Теряется весь смысл отслеживания изменений на CVN.
                Как получить доступ к скриптам Global Scripts через OtAut (OT Automation Interface)? Как реализовать выгрузку actions?

                Комментарий


                • #9
                  I have check_mk server as monitoring solution,and we are planing to introduce Omnitracker as ticketing solutions.

                  Can anyone give me a python or bash example for creating/transfering incidents from check_mk server (Centos7) to Omnitracker

                  Just examples to get me going.

                  Thanks in advance

                  Комментарий

                  Обработка...
                  X