JIRA中的並聯審批流程定製

JIRA號稱可以跟蹤任何事務,讓JIRA的流程來匹配團隊的工作流程,而不是讓你的團隊適應JIRA的工作流程。但是在實踐中,有些有些流程用JIRA還是比較困難的,比如並聯審批流程,一個並聯審批流程需求大概如下:

  • 同時指定多個評審人
  • 只有評審人才能夠對該問題進行審批操作
  • 評審人都能夠及時收到通知
  • 每個評審人都能夠獨立進行審批
  • 最後一個評審人審批完畢時,自動更改狀態爲完成審批
  • 評審負責人要清楚瞭解哪些人已經評審了,哪些還沒有

這個需求JIRA本身的功能就很難滿足,必須通過插件來完成,這也是JIRA功能的強大之處,可以通過插件來擴展其功能。這裏我們需要安裝一個Script Runner插件:

https://marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner

這是一個免費的插件,有了這個插件你就可以在工作流中編寫腳本,你的工作流想怎麼執行就怎麼執行。

下面分享一下我的並聯審批解決方案:

1,先安裝好Script Runner插件。

2,增加兩個自定義字段”評審人“,”已評審“,都爲多用戶選擇字段。“評審人”用於在創建評審問題時,指定參加評審的人員,“已評審”字段用於在評審過程中,保存已經評審的人,剩下還未評審的人保留在“評審人”字段中。

3,定製並聯審批流程,我的流程如下:


4,設置審批動作的權限,點擊工作流中的”審批(71)”動作,在彈出的菜單中選擇“View Conditions”,添加一個動作的觸發條件:

這個“Script Condition”是隻有安裝了Script Runner之後纔有的,選擇它就可以通過執行腳本的方式來判斷是否有權限執行這個動作,這裏我們選擇內置腳本”Allows the transition if this query matches a JQL query ”來執行判斷,這個腳本執行一個JQL查詢,如果滿足就允許這個動作,所以JQL就這麼寫:

  • 評審人 in (currentUser())

這個表示當前用戶爲評審人中的一個時才允許這個動作。

5,讓評審人都能夠及時收到通知。JIRA的通知功能很強大,可以通過郵件、RSS、@、聊天等方式。要讓評審問題在“開始審批”之後,通知相關的評審人,這裏有兩種方式,一種比較簡單,就是修改通知方案,將“評審人”添加到通知設置中,如下:


另一種方案是採用Script Runner的腳本執行的方式,該腳本是在“開始審批”這個動作的“Post Functions”中執行的,如下:


選擇執行腳本文件的方式,如下:


這裏要注意,這個路徑是系統的文件路徑,不是http路徑,我設置的時候一直沒搞清楚是什麼路徑,又不好調試,只好逐一測試,按絕對路徑寫全就可以。

腳本內容參見附件中的startapproval.groovy,該腳本的設計思想就是開始審批動作執行之後,將評審人都加到關注列表中,然後通知方案就會通知到關注的人。

這個腳本的內容功能正確,但是寫的很亂,有興趣就湊合着看吧,因爲我完全不懂java,所以腳本也是參考網上的衆多例子,以及script runner的內置例子寫成的。

6,最後一個評審人審批完畢時,自動更改狀態爲審批完成。這個功能可有可無,但是對於一個自動化系統來說,有這個自動功能當然更好,這個也試用Script Runner實現,基本原理就是,評審人點擊”審批“之後,如果”評審人“字段爲空了,也就是都評審完了(每評審一個,會將評審人添加到”已評審“字段中),那麼就執行”審批完成“這個動作。

這個腳本在”審批“動作的Post Functions中設置,同樣選擇腳本文件的方式,腳本內容參見附件中的approval.groovy。

7,評審負責人能夠了解哪些已經評審了,哪些還在評審當中。這個功能也在approval.groovy中執行,基本原理是每個評審人評審完畢後,將其從”評審人“字段中刪除,添加到”已評審“字段中。

8,設置”重新審批“的動作,重新審批的意思是,當評審負責人發現某個評審人的評審有問題時,可以叫其重新進行審批,所以需要將其從”已評審“中去掉,或者需要添加評審人時,也可以使用”重新審批“這個動作。所以”重新審批“的PostFunctions中需要執行兩個腳本,依次是reapproval.groovy和startaporoval.groovy,內容參見附件。

9,在面板中添加一個過濾器,過濾出需要當前用戶參與評審的問題,下面這個就是我的”指定給我的“過濾器:

  1. issuetype = 審批 AND status in (審批中) AND (assignee in (currentUser()) OR 評審人 in (currentUser())) OR issuetype = 審批 AND status in (審批完成) AND assignee in (currentUser()) OR issuetype != 審批 AND status in (Open"In Progress", Reopened, Resolved) AND assignee in (currentUser()) ORDER BY updated  

附件:scriptrunner腳本


終於寫完了,要寫清楚一篇文章,真不容易,要花很長時間,而且還有很多細節是沒有辦法說清楚的,就這樣吧。哦,對了,那個腳本的後綴名還必須是groovy。


買JIRA上CSDN,特殊折扣購買通道:

http://atlassian.csdn.net/module/btc/atlassian/prduct_detail?project_id=445&module=34&product=9

CSDN開立Atlassian中文技術論壇更多交流分享請點擊:

http://bbs.csdn.net/forums/atlassian


博文原創作者:newborn2012


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章