iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Agile

Product Backlog 與他的快樂小夥伴系列 第 25

如何讓透過 Jira Automation 新增一個類似 Sprint 分隔線的功能呢? (1)

  • 分享至 

  • xImage
  •  

在過往我們要在 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

如此一來,就得到我們期待的效果。其他技術細節就讓我們明天來詳解吧!


上一篇
我該怎麼快速知道要 Refine 哪些 Item?
下一篇
如何讓透過 Jira Automation 新增一個類似 Sprint 分隔線的功能呢? (2)
系列文
Product Backlog 與他的快樂小夥伴31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言