在過往我們要在 Jira 認領 Sprint Backlog 時,我們會在 Review 時,透過 complete sprint 將所有未完成的 Item (如果有) 釋放回 Product Backlog。等到 SP1 時,PO 會將 所有 Item 重新排序,那團隊在認領時,只要決定會做到第幾個 Item 就好。在我們決定後,我們就只要移動 Sprint Backlog 與 Product Backlog 之間的分隔線,他就會幫我們把分隔線以上的 Item 都放在 Sprint Backlog 之中,是一個很方便的功能。
![[CleanShot 2022-10-10 at 22.25.50@2x.png]]
那突發奇想,我們有沒有可能自己透過 Jira Automation 建立類似功能的分隔線呢?比如說當我把「? 以上是期望這個 Sprint 要 Refine」移動時,他會自動將排序在他之上的 Item,如果是處於「❓ To Clarify」的 Item,都自動變成「? To Refine」這樣的功能。經過研究與實驗,是可以做到的!就讓我們來解說看看如何實作吧!
首先,來腳本圖全覽:
![[CleanShot 2022-10-10 at 22.32.54@2x.png]]
我們先用虛擬碼來跟大家解釋這個腳本
func main(event)
if event.equal('issue_update')
toRefine(event.issue)
end
end
func toRefine(updatedIssue)
if (issue.level.notEqual('level2'))
return
end
if (issue.changelog.rank.empty?)
return
end
const divider_issue_key = 'ABC-123'
const project_code = 'ABC'
const to_refine_status = '? To Refine'
const to_clarify_status = '❓ To Clarify'
const targer_level = '2'
var rank_baseline
if (updateIssue.key == divider_issue_key)
rank_baseline = updateIssue.rank
Issue.whereIs('project', project_code)
.whereIs('level', targer_level)
.whereIs('status', to_clarify_status)
.rankGreaterThan(divider_issue_key)
.all
.each |issue| do
issue.status = to_refine_status
end
Issue.whereIs('project', project_code)
.whereIs('level', targer_level)
.whereIs('status', to_refine_status)
.rankLessThan(divider_issue_key)
.all()
.each do |issue|
issue.status = to_clarify_status
end
reutrn
end
rank_baseline = Issue.keyIs(divider_issue_key).first().rank
if (updatedIssue.rank.lessThan(rank_baseline))
issue.status = to_clarify_status
return
end
if (updatedIssue.rank.greaterThan(rank_baseline))
issue.status = to_refine_status
return
end
end
簡單來說,就是當我們移動一個 issue 時,會因為 issue 改變而觸發我們這個 rule,我們會先檢查這個 issue 是不是 standard item,然後再去他的 changelog 檢查,這個改變是不是有關於 rank,如果都是的話,那就繼續往下執行。
如果這個 issue 就是我們的分隔線本身,那它就會將在它之上,但仍然為 ❓ To Clarify
的 issue 狀態改為 ? To Refine
;相對的,將在它之下,,但仍然為 ? To Refine
的 issue 狀態改為 ❓ To Clarify
。
如果移動的 issue 是其他 issue,那我們就會比較他跟我們分隔線的 rank 值,如果他是在我們分隔線之上,且狀態仍然為 ❓ To Clarify
時,就將狀態改為 ? To Refine
;如果他是在我們分隔線之下,且狀態仍然為 ? To Refine
時,就將狀態改為 ❓ To Clarify
。
如此一來,就得到我們期待的效果。其他技術細節就讓我們明天來詳解吧!