2017-05-04 32 views
0

我有「庫」下章魚變量 - >「變量集」與名八達通輸出變量和訪問他們

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> 

回答

1

不幸的似乎沒有電子郵件模板內是不可能的。 請參閱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

亞歷克斯嗨,我對這麼晚纔回復真的很抱歉。我非常感謝你的回答,這對我修改我的電子郵件通知有一定的幫助。再次感謝解決方案。 –