Ejemplos de scripts de post-proceso

Los scripts de post-proceso se escriben en JavaScript.
Los scripts de post-proceso deben establecer la propiedad Status para especificar el estado del script. El script puede especificar cualquier valor de la propiedad Status. Por ejemplo, para especificar que el script ha sido correcto, ejecute el siguiente mandato en el script de post-proceso:
properties.put("Status","Success");

Comprobación del resultado de un paso

El script de post-proceso puede examinar el registro de salida del paso y ejecutar mandatos en función del resultado. En el siguiente fragmento de código, scanner.register() registra las cadenas error at line y the value is con un motor de expresiones regulares y, a continuación, ejecuta mandatos si se encuentran esas cadenas. Una vez registradas todas las cadenas, llama a scanner.scan() en el registro de salida del paso línea por línea.

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

     //
     // Evaluate the built-in exitCode property, which indicates the exit code
     // of the script called by the plug-in step. Typically, if the value of
     // the exitCode property is non-zero, the plug-in step failed.
     //
     if (properties.get("exitCode") != 0) {
          properties.put("Status", "Failure");
     }
     else {

          //
          // Register a scanner to search for the text "error at line" in the log.
          // The first argument is a regular expression.
          //
          // The second argument, an inline function, is invoked once for
          // every line in the log output that matches the pattern. The "lineNumber"
          // variable contains the line number where the match occurred, and the
          // "line" variable is the full text of the line.
          //
          scanner.register("(?i)ERROR at line",  function(lineNumber, line) {

              //
              // In this case, we build up an "Error" property which
              // contains the text of all errors that are found. We find every
              // line starting with "error at line" and add it to this list.
              //
              var errors = properties.get("Error");
              if (errors == null) {
                  errors = new java.util.ArrayList();
              }
              errors.add(line);


              //
              // If a line starting with "error at line" is found, the step has
              // failed, so we set the special "Status" property to "Failure",
              // indicating to the UrbanCode Deploy server that the step should
              // be marked as a failure.
              //
              properties.put("Status", "Failure");
          });
         
          //
          // Multiple searches can be registered with the scanner. We add a
          // second search to look for some interesting text to set as an output
          // property.
          //
          // For example, if there is a line "The value is BLUE", then we end up
          // with an output property, "Value", with a value of "BLUE".
          //
          scanner.register("The value is", function(lineNumber, line) {
              var value = line.replace("The value is ", "");
              properties.put("Value", value);
          });
         
          scanner.scan();


          //
          // Convert the collected list of error strings into a single string and
          // set that as an output property.
          //
          var errors = properties.get("Error");
          if (errors == null) {
              errors = new java.util.ArrayList();
          }
          properties.put("Error", errors.toString());
     }

Recuperación de una propiedad procedente de un paso anterior

Los siguientes scripts asumen dos pasos en el mismo proceso. El script de post-proceso del primer paso crea dos propiedades de salida, que se denominan Status y Step1Prop:
if (properties.get("exitCode")==0)
  { properties.put("Status","Success"); }
else
  { properties.put("Status","Failure"); }

properties.put("Step1Prop","value1");
A continuación, un segundo paso puede acceder a esas propiedades. Por ejemplo, si el primer paso se ha denominado Step1 y ha especificado las propiedades de salida Status y Step1Prop, puede crear un paso de Shell con el siguiente código para acceder a esas propiedades:
echo Properties of previous step:
echo "${p:Step1/Status}"
echo "${p:Step1/Step1Prop}"
El segundo paso puede utilizar también esas propiedades en su script de post-proceso. Por ejemplo, el siguiente script de post-proceso incluye la propiedad Status del paso anterior en una propiedad del segundo paso:
{ 
properties.put("Step2Prop","New property");
properties.put("Status","OK"); 
properties.put("StatusOfPreviousStep","${p:Step1/Status}"); 
}

Comentarios