Примеры сценариев заключительной обработки

Сценарии заключительной обработки создаются на языке JavaScript.
В сценариях заключительной обработки должно задаваться свойство Status для указания состояния сценария. В сценарии для свойства Status может быть указано любое значение. Например, чтобы указать, что сценарий был успешным, выполните в сценарии заключительной обработки следующую команду:
properties.put("Status","Success");

Проверка результата шага

Сценарий заключительной обработки может проверять выходной протокол шага и выполнять команды на основе результата. В следующем фрагменте кода scanner.register() регистрирует строки ошибка в строке и значение равно с помощью механизма регулярных выражений, а затем выполняет команды, если эти строки найдены. После того как все строки зарегистрированы, вызывается scanner.scan() для каждой строки выходного протокола шага.

     properties.put("Status", "Success");

     //
     // Оценим встроенное свойство exitCode, содержащее код завершения
     // сценария, вызванного шагом модуля. Как правило, если значение
     // свойства exitCode отлично от нуля, шаг модуля не выполнен.
     //
     if (properties.get("exitCode") != 0) {
          properties.put("Status", "Failure");
     }
     else {

          //
          // Зарегистрируем сканер для поиска текста "ошибка в строке" в протоколе.
          // Первый аргумент - регулярное выражение.
          //
          // Второй аргумент (подставляемая функция) вызывается для каждой строки
          // в выводе протокола, которая совпадает с шаблоном. Переменная "lineNumber"
          // содержит номер строки, в которой найдено совпадение, а переменная
          // "line" - полный текст строки.
          //
          scanner.register("(?i)ошибка в строке",  function(lineNumber, line) {

              //
              // В данном случае мы создаем свойство "Error", которое
              // содержит текст всех найденных ошибок. Мы находим каждую строку,
              // начинающуюся со слов "ошибка в строке", и добавляем ее в список.
              //
              var errors = properties.get("Error");
              if (errors == null) {
                  errors = new java.util.ArrayList();
              }
              errors.add(line);


              //
              // Если строка, начинающаяся со слов "ошибка в строке", найдена,
              // шаг не выполнен, поэтому в специальном свойстве "Status" задается значение
              // "Failure", указывающее серверу UrbanCode Deploy, что шаг должен
              // быть помечен как сбойный.
              //
              properties.put("Status", "Failure");
          });
         
          //
          // Со сканером можно зарегистрировать несколько поисковых запросов. Добавим
          // второй запрос для поиска какого-нибудь содержательного текста,
          // который задается как выходное свойство.
          //
          // Например, если существует строка "Значение равно BLUE", то получим
          // выходное свойство "Value" со значением "BLUE".
          //
          scanner.register("Значение равно", function(lineNumber, line) {
              var value = line.replace("Значение равно ", "");
              properties.put("Value", value);
          });
         
          scanner.scan();


          //
          // Преобразуем полученный список ошибочных строк в одну строку
          // и зададим его как выходное свойство.
          //
          var errors = properties.get("Error");
          if (errors == null) {
              errors = new java.util.ArrayList();
          }
          properties.put("Error", errors.toString());
     }

Получение свойства из предыдущего шага

В следующих сценариях предполагаются два шага в одном и том же процессе. Сценарий заключительной обработки для первого шага создает два выходных свойства с именами Status и Step1Prop:
if (properties.get("exitCode")==0)
  { properties.put("Status","Success"); }
else
  { properties.put("Status","Failure"); }

properties.put("Step1Prop","value1");
Затем к этим свойствам может обращаться второй шаг. Например если первый шаг назывался Step1 и задавал выходные свойства Status и Step1Prop, то можно создать шаг оболочки со следующим кодом для доступа к этим свойствам:
echo Properties of previous step:
echo "${p:Step1/Status}"
echo "${p:Step1/Step1Prop}"
Второй шаг может также использовать эти свойства в своем сценарии заключительной обработки. Например следующий сценарий заключительной обработки включает свойство Status предыдущего шага в свойство для второго шага:
{ 
properties.put("Step2Prop","New property");
properties.put("Status","OK"); 
properties.put("StatusOfPreviousStep","${p:Step1/Status}"); 
}

Комментарии