八达通输出变量和访问他们

问题描述:

我有“库”下章鱼变量 - >“变量集”与名八达通输出变量和访问他们

1. DatabaseExceptions 
2. ReportsExceptions 
3. ApplicationExceptions 

而且我在章鱼的步骤已经在我的项目“部署过程”的设置变量

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

上述可变设定与通过使用正在使用在脚本例外的特定步骤的predeploy.ps1调用“的PowerShell”脚本异常。

在最后一步(发送电子邮件)我试图通过检查特定变量是否包含信息来发送包含异常变量信息的电子邮件。

我被选中复选框在发送电子邮件一步身体做这个(“身体为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> 

数据库和报表的脚本有错误,我的输出看起来像下面哪个是正确的如预期

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

我的问题

是可以做一些下面我的步骤名称和开始我的变量名的 相同

<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> 

不幸的似乎没有电子邮件模板内是不可能的。 请参阅this thread八达通支持。

也只是要注意,你可以在需要的每一步都使用相同的输出变量名,它会在每个步骤中不同的范围,即

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

和潜在的解决办法是有一个单独的脚本步骤为电子邮件步骤准备exceptions。喜欢的东西:

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

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

然后一个可以通过步骤使用的电子邮件步变量,而不需要循环:

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

更新的解决方案

正如上面提到的,如果一个在步骤之间共享相同的输出变量名称,那么可以简化解决方案,而不需要单独的脚本步骤。所有这些都将在电子邮件模板来完成:

#{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} 

这将导致如电子邮件输出:

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

亚历克斯嗨,我对这么晚才回复真的很抱歉。我非常感谢你的回答,这对我修改我的电子邮件通知有一定的帮助。再次感谢解决方案。 –