思路逐漸清晰了,Build Workflow的solution就是:修改Build Template(就是那個XAML),最後看Build的輸出結果。
二話不說,我們先做一個Demo:
1.雙擊開啟Build Template
Workflow還是我們之前看到的那個,沒有變化,但是,請留意左下角的那三個藍底白字的Tab:分別是Variables、Arguments和Imports
2. 點擊Arguments,可以看到一份Arguments列表,它們都是實現定義好的,如下所示:
3.在列表的最下面,可以看到有一行Create Argument,
點擊該行,建立一個新的Argument,設定它的Name為MessageA,其它屬性為預設值。
4.介紹完Argument,我們試玩一下Variable
你們不覺得Argument是一個全域變數嗎?至少在這個Template中,一次聲明,處處使用。
而Variable則是有scope的。在父親層級的Activity中定義一個Variable,在其中的所有子Activity都可以直接使用,但反之不行。
在這個Scenario中,我們選中Sequence這個最頂部的Activity(高亮顯示表示我們選中了),
建立一個Variable,取名為MyMessage,並將其預設值設定為"Hello" + MessageA,那麼這個Variable就隨時隨地都可以使用了。
5.接下來,我們要輸出MyMessage這個Variable
為此,我們需要從Toolbox中拖出一個名為WriteBuildMessage的Activity,
把它放置於Template的Get the Build這個Activity之後:
看到那些紅色驚歎號了沒?這是因為這個Activity上還有一些Required的屬性沒有設定。
6.選中WriteBuildMessage,按F4開啟屬性表單,
我們將Message屬性設定為MyMesage(這是一個Variable),同時,為了在Workflow上顯示得更有意義,我們將DisplayName修改為Show some words
於是,Workflow的外觀變成了:
7.至此,一個Demo全都做好了,別忘了還有最後一步,就是把修改後的Template(即xaml)check in到VSTF中
怎麼玩呢?玩Build也是一種學問。
1.重新開啟我們之前建立的Build:
我們發現多了一個名為Show a message的欄位,我們將其設定為World
2.現在可以執行Build了。
在Build完成所產生的輸出介面中,我們並沒有發現VSTF為我們額外產生些什麼資訊。
這是因為,還記得我們拖到Workflow中的WriteBuildMessage那個Activity嗎?仔細觀察它的Inportance屬性,被設定為Normal(另外兩個值分別是High和Low)
而在VSTF的Build面板中,我們發現Logging Verbosity的值也是Normal(另外3個值分別是Minimal、Detailed和Diagnostic)
正是這兩個地方設定的值不匹配才導致了我們所要的輸出結果看不到的問題。
有2種解決方案:
1.在Workflow中將Importance設定為High。
2.在VSTF的Build面板中,將Logging Verbosity的值設定為Detailed(設定為Diagnostic也可以,但會產生大量冗餘的資訊)
無論哪一種方法,都會輸出Hello World的資訊,如所示:
總結一下:我們修改了Template(添加了Argument和Variable,以及一個Build Activity),於是在VSTF的Build Template中要求我們多輸入一個Show a message參數,所以在Build的時候,會輸出Hello World的資訊。
這一切的中樞,就是那個Metadata對話方塊,通過它,我們把Workflow中的Argument和VSTF中的Build Template參數一一mapping起來。