Exemples de scripts de post-traitement

Les scripts de post-traitement sont rédigés en JavaScript.
Les scripts de post-traitement doivent définir la propriété Status afin de spécifier le statut du script. Le script peut spécifier n'importe quelle valeur pour la propriété Status. Par exemple, pour indiquer que l'exécution du script a abouti, exécutez la commande suivante dans le script de post-traitement :
properties.put("Status","Success");

Vérification du résultat d'une étape

Le script de post-traitement peut examiner le journal de sortie de l'étape et lancer des commandes compte tenu du résultat. Dans le fragment de code suivant, scanner.register() enregistre les chaînes error at line et the value is avec un moteur d'expression régulière, puis lance des commandes si ces chaînes sont détectées. Une fois que toutes les chaînes sont enregistrées, il appelle scanner.scan() ligne par ligne sur le journal de sortie de l'étape.

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

     //
     // Evaluation de la propriété exitCode intégrée, qui indique le code de sortie
     // du script appelé par l'étape de plug-in. Généralement, si la valeur de
     // la propriété exitCode est autre que zéro, ceci indique un échec de l'étape de plug-in.
     //
     if (properties.get("exitCode") != 0) {
          properties.put("Status", "Failure");
     }
     else {

          //
          // Enregistrement d'un scanner pour rechercher le texte "error at line" dans le journal.
          // Le premier argument est une expression régulière.
          //
          // Le second argument, qui est une fonction en ligne, est appelé une fois pour
          // chaque ligne du journal de sortie qui correspond au canevas. La variable "lineNumber"
          // contient le numéro de la ligne où la correspondance a été trouvée et la
          // variable "line" est le texte intégral de la ligne.
          //
          scanner.register("(?i)ERROR at line",  function(lineNumber, line) {

              //
              // Dans ce cas, nous construisons une propriété "Error" qui
              // contient le texte de toutes les erreurs rencontrées. Toutes les lignes commençant par
              // "error at line" sont identifiées et ajoutées à cette liste.
              //
              var errors = properties.get("Error");
              if (errors == null) {
                  errors = new java.util.ArrayList();
              }
              errors.add(line);


              //
              // Si une ligne commençant par "error at line" est détectée, l'étape a
              // échoué et la propriété spéciale "Status" est alors définie à "Failure",
              // ce qui indique au serveur UrbanCode Deploy de marquer l'étape
              // comme ayant échoué.
              //
              properties.put("Status", "Failure");
          });
         
          //
          // Plusieurs recherches peuvent être enregistrées dans le scanner. Nous ajoutons une
          // seconde recherche pour rechercher un texte qui nous intéresse et le définir comme
          // propriété de sortie.
          //
          // Par exemple, si une ligne contient "The value is BLUE", nous obtenons une
          // propriété de sortie nommée "Value" et dont la valeur est "BLUE".
          //
          scanner.register("The value is", function(lineNumber, line) {
              var value = line.replace("The value is ", "");
              properties.put("Value", value);
          });
         
          scanner.scan();


          //
          // Conversion de la liste des chaînes d'erreur collectées en une seule chaîne et
          // définition de celle-ci comme propriété de sortie.
          //
          var errors = properties.get("Error");
          if (errors == null) {
              errors = new java.util.ArrayList();
          }
          properties.put("Error", errors.toString());
     }

Extraction d'une propriété d'une étape précédente

Les scripts suivants supposent qu'un même processus comporte deux étapes. Le script de post-traitement pour la première étape crée deux propriétés de sortie, nommées Status et Step1Prop:
if (properties.get("exitCode")==0)
  { properties.put("Status","Success"); }
else
  { properties.put("Status","Failure"); }

properties.put("Step1Prop","value1");
Une seconde étape peut ensuite accéder à ces propriétés. Par exemple, si la première étape était nommée Step1 et spécifiait les propriétés de sortie Status et Step1Prop, vous pourriez créer une étape de shell avec le code suivant pour accéder à ces propriétés :
Renvoi des propriétés de l'étape précédente :
echo "${p:Step1/Status}"
echo "${p:Step1/Step1Prop}"
La seconde étape peut aussi utiliser ces propriétés dans son propre script de post-traitement. Par exemple, le script de post-traitement suivant inclut la propriété Status de l'étape précédente dans une propriété de la seconde étape :
{ 
properties.put("Step2Prop","New property");
properties.put("Status","OK"); 
properties.put("StatusOfPreviousStep","${p:Step1/Status}"); 
}

Vos commentaires