八达通输出变量并访问它们

时间:2017-05-04 13:06:32

标签: powershell octopus-deploy octopus

我在“图书馆”下有章鱼变量 - >名为

的“变量集”变量
1. DatabaseExceptions
2. ReportsExceptions
3. ApplicationExceptions

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

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

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

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

我在发送电子邮件步骤正文中执行此操作,方法是选中复选框(“正文为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>

1 个答案:

答案 0 :(得分:1)

不幸的是,在电子邮件模板中似乎无法做到这一点。 请参阅Octopus支持中的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