0

我在“库”->“变量集”变量下有章鱼变量的名称

1. DatabaseExceptions
2. ReportsExceptions
3. ApplicationExceptions

我已经在章鱼中设置了我的项目“部署过程”作为步骤

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

上述变量通过使用“PowerShell”脚本设置为异常,这些脚本使用脚本中异常的特定步骤的 predeploy.ps1 调用。

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

我通过选中复选框(“Body as 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>
4

1 回答 1

1

不幸的是,这在电子邮件模板中似乎是不可能的。请参阅八达通支持中的此线程

还需要注意的是,您可以在所需的每个步骤中使用相同的输出变量名称,并且每个步骤都有不同的范围,即

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 
于 2017-05-05T23:56:47.187 回答