2017-05-04 2 views
0

J'ai des variables poulpes sous la rubrique « Bibliothèque » -> « Ensembles variables » variables avec des nomsvariables de sortie Octopus et les accès

1. DatabaseExceptions 
2. ReportsExceptions 
3. ApplicationExceptions 

et je l'ai mise en place de mon projet « processus de déploiement » dans le poulpe comme des étapes

1. Database 
2. Reports 
3. Application 
4. Send Email 

la variable au-dessus sont définies avec des exceptions à l'aide de scripts « PowerShell » qui sont appelés à l'aide predeploy.ps1 de l'étape particulière sur les exceptions dans les scripts. À la dernière étape (Envoyer un courriel), j'essayais d'envoyer des courriels contenant l'information contenue dans les variables d'exception en vérifiant si une variable particulière contenait de l'information.

Je fais cela dans l'envoi corps étape Email en cochant la case à cocher (« Body HTML »)

<h2>Deployment Steps</h2> 
<ol> 
    #{each step in Octopus.Step} 
     #{if step.Status.Code} 
      <li>#{step | HtmlEscape} &mdash; 
       #{if Step.Name == "Database"} 
        #{if Octopus.Action[Database].Output.DatabaseExceptions} 
         <pre>#{Octopus.Action[Database].Output.DatabaseExceptions}</pre> 
        #{/if} 
       #{/if} 
       #{if Step.Name == "Reports"} 
        #{if Octopus.Action[Reports].Output.ReportsExceptions} 
         <pre>#{Octopus.Action[Reports].Output.ReportsExceptions}</pre> 
        #{/if} 
       #{/if} 
       #{if Step.Name == "Application"} 
        #{if Octopus.Action[Application].Output.ApplicationExceptions} 
         <pre>#{Octopus.Action[Application].Output.ApplicationExceptions}</pre> 
        #{/if} 
       #{/if} 
      </li> 
     #{/if} 
    #{/each} 
</ol> 

Les scripts de base de données et des rapports a des erreurs et ma sortie ressemble ci-dessous qui est correct comme prévu

Deployment Steps 
1. Database — Exception on processing DB scripts - info:... 
2. Reports — Exception on processing Reports - info:... 
3. Application 
4. Send Email 

Et ma question:

Est il possible de faire quelque chose comme ci-dessous mon nom de l'étape et à partir de mon nom de variable sont même

<h2>Deployment Steps</h2> 
<ol> 
    #{each step in Octopus.Step} 
     #{if step.Status.Code} 
      <li>#{step | HtmlEscape} &mdash; 
        #{if Octopus.Action[#{step.Name}].Output.#{step.Name}Exceptions} 
         <pre>#{Octopus.Action[#{step.Name}].Output.#{step.Name}Exceptions}</pre> 
        #{/if} 
      </li> 
     #{/if} 
    #{/each} 
</ol> 

Répondre

1

Malheureusement, cela ne semble pas être possible dans le modèle de courrier électronique. Voir this thread dans le support Octopus.

Aussi juste de noter, vous pouvez utiliser le même nom de variable de sortie dans toutes les étapes nécessaires et il aurait une portée différente pour chaque étape, à savoir

Set-OctopusVariable -name "Exceptions" -value $someValue 

Et potentiellement la solution pourrait être d'avoir un séparé étape de script pour préparer le exceptions pour l'étape de l'e-mail. Quelque chose comme:

$exceptions = "" 
$OctopusParameters.GetEnumerator() | Where-Object { $_.Key -like '*Output.Exceptions*' } | % { 
    Write-Host " $($_.Key) - $($_.Value)" 
    $exceptions += $_.Value + "`r`n" 
} 

Set-OctopusVariable -name "ExceptionsToEmail" -value $exceptions 

Et puis on pourrait utiliser la variable dans l'étape de courrier électronique sans besoin de boucle à travers les étapes:

<pre> 
    Exceptions: 
    #{Octopus.Action[Prep Email Output].Output.ExceptionsToEmail} 
</pre> 

solution Mise à jour

Comme il est indiqué ci-dessus, si l'on partageait le même nom de variable de sortie entre les étapes, la solution pouvait alors être simplifiée, sans avoir besoin d'une action de script distincte. Tout cela sera fait dans le modèle e-mail:

#{each action in Octopus.Action} 
    <strong>#{action.Name}</strong> 
    #{if action.Output.Exceptions} 
     <p> - #{action.Output.Exceptions}</p> 
    #{/if} 
    #{unless action.Output.Exceptions} 
     - Succeeded 
    #{/unless} 
#{/each} 

Ce qui entraînerait une sortie e-mail comme:

Database - database exception occured 
Reports - reports exception occured 
Application - some application exception occurred 
Some other step - Succeeded 
Send email - Succeeded 
+0

Salut Alex, je suis vraiment désolé pour la réponse tardive. J'apprécie vraiment votre réponse, ce qui me permet de modifier ma notification par courriel. encore une fois merci pour la solution. –