Jira Software 8.9 release note

Jira Software 8.9 릴리스 노트

Jira Software 8.9 릴리스 노트: https://confluence.atlassian.com/jirasoftware/jira-software-8-9-x-release-notes-1003522922.html

이번 포스트는 Jira Software 8.9 릴리스에 대해서 보겠습니다.
2020년 5월에 릴리스한 버전입니다. 이번 릴리스에도 큰 변경 사항은 없으나 그나마 멘션할 만한 내용이 있다면 속도 차트(Velocity Chart)의 업데이트가 있었습니다.

하이라이트 (Highlights)

  • Refreshed Velocity Chart
  • Get more from cluster monitoring
  • Accessibility: Text spacing
  • A tailored upgrade path

Refreshed Velocity Chart

변경된 속도 차트(Velocity Chart) 보고서

기능에 대한 자세한 설명은 이 페이지에서 볼 수 있습니다.
속도 차트는 애자일 보드에서 스프린트를 사용하는 팀이 스프린트 별 처리한 작업으로 속도를 볼 수 있도록 도와주는 차트입니다.
비즈니스 밸류, 이슈 수, 스토리 포인트 등으로 속도를 측정해볼 수 있습니다.
Board -> Reports -> Velocity Chart 메뉴에서 해당 차트를 사용해보실 수 있습니다.
(물론 스프린트를 사용해보아야 차트를 볼 수 있겠죠?)

Accessibility: Text spacing

개인 설정에서 자간(글자 간격)을 조정할 수 있게 되었습니다. profile > accessibilty 에서 설정할 수 있습니다.
글씨가 다닥다닥 붙어있는 것이 불편했던 분들이라면 편리한 기능이겠네요. :)

Get more from cluster monitoring

뭔가 하이라이트 항목이 앞에 있는 것과 바뀐 것 같지만, 데이터 센터 버전에서는 클러스터 모니터링과 관련한 업데이트가 있었습니다.
이번 업데이트로 오래된 노드는 눈에 띄지 않도록 변경되었습니다.
또, 클러스터 모니터링 페이지에 추가한 새로운 정보를 통해 오래된 노드를 신속하게 추적 및 제거하고 클러스터에서 실패한 노드를 수정할 수 있게 되었습니다.

Jira Administration > System > Clustering 메뉴에서 보실 수 있습니다.

A tailored upgrade path

업그레이드 전에 필요한 내용들을 체크할 수 있는 기능이 8.0에 추가되었었는데 그에 대한 추가 공유네요.
버전 업그레이드하기 전에 최소한 어떤 내용을 확인해야하는지 알 수 있어서 좋은 기능이니 참고하시면 좋겠습니다.

마무리

이번 8.9 업데이트도 큰 컨텐츠, 기능성 업데이트는 없었네요. 버그 수정은 꽤 있긴합니다.
속도 차트의 경우는 Jira 개발팀에서 많이 사용하는 기능이라 리프레시 업데이트를 해보았다고 하는데, 속도 차트 사용 방법도 나중에 정리해서 공유해보면 어떨까 하는 생각이 드네요.
8.9 릴리스 소개는 이만 마치겠습니다. 감사합니다.

Jira Software 8.6 ~ 8.8 release note

Jira Software 8.6 ~ 8.8 릴리스 노트

Jira Software 8.6 ~ 8.8 릴리스 노트:

이번 포스트는 Jira Software 8.6 ~ 8.8 버전 릴리스들을 모아서 보겠습니다.
(사실 8.6 릴리스에 추가된 기능이 많고 8.7, 8.8 릴리스에는 크게 소개할만한 내용은 없습니다.)

Jira 8.6

2019년 12월에 릴리스한 버전입니다.

하이라이트 (Highlights)

  • Jira copies over changes files on upgrade
  • New JVM code cache check
  • Replying to JIRA notifications in Outlook made way better
  • Users and roles made better
  • PostgreSQL 10 comes to Jira
  • Several older platforms get deprecated
  • Prefix and suffix search
  • Accessible dropdown menus
  • Configurable scheme parameters in Jira REST API for projects creation
  • Burnup charts in Jira Software
  • Self-protect and sleep easy with rate limiting
  • New information in the audit log
  • Cluster monitoring

8.6 릴리스는 앞선 8.5 엔터프라이즈 릴리스 후에 나온 버전이라 업데이트된 기능들이 많습니다.
시스템 관리자가 알아야 하는 내용보다 태스크 관리 및 프로젝트 관리 측면의 기능 내용을 중점으로 살펴보겠습니다.

Replying to JIRA notifications in Outlook made way better

많은 사용자들의 요청에 의해 추가된 기능입니다.
Outlook에서 Jira 이슈 알림 메일에 댓글을 남길 수 있도록 하는 기능을 세팅할 수 있게 되었네요.
설명 상으로는 2개의 기능을 deprecate 했다고 하네요.

  • Add a comment from the non-quoted email body
  • Create a new issue or add a comment to an existing issue

설정과 관련한 내용은 이 링크에서 확인할 수 있습니다.
참고차 설정 링크에는 기능을 어떻게 설정할 수 있는 방법보다는 개론과 같은 내용이 있습니다.
(Jira 어드민이 대충 이런 느낌으로 사용하면 될 것이다의 느낌이에요.)

Users and roles made better

변경된 Users & Roles 관리 메뉴

기존에는 하나하나 role 그룹에 유저들을 추가해줘야 했다면 이제는 체크박스를 이용해서 더 간편하게 수정할 수 있도록 변경되었습니다.
다만 그전에는 롤에 따라서 어떤 유저가 있는지 한분에 볼 수 있었는데 지금은 roles 메뉴를 눌러서 볼 수 있도록 변경되었습니다.
(지금 상태가 조금 더 잘 정리되어 보이는 것 같긴 합니다. ㅎㅎ)

지난 8.0 릴리스에는 Prefix 검색에 대해서 지원을 시작했는데 이번 8.6부터 suffix 검색도 추가되었다고 합니다. 👏

Prefix 검색Suffix 검색
text ~ “work*”text ~ “*box”

검색 기능이 조금씩 개선되는 것 같아 좋네요! :)

Accessible dropdown menus

드롭다운 메뉴에 대해서 스크롤이 추가되었다는 내용입니다.
기존에는 메인화면을 내려야 했다면 드롭메뉴 자체에 스크롤이 생겨서 편하게 메뉴를 볼 수 있게 되었네요.

Burnup charts in Jira Software

번업(Burnup) 차트 기능이 Jira Server에도 추가되었습니다.
앞으로 애자일 보드 -> 리포트에서 새로운 번업 차트를 볼 수 있게 되었네요.

More granular sprint permissions

하이라이트에는 없는 내용이지만 언급이 필요해 보여서 넣었습니다.
스프린트 관리 권한에 대해 몇 가지가 분리되어 추가되었습니다. 이에 따라 스프린트 관리를 사용자 권한에 맞게 부여할 수 있게 되었습니다.
기존에 있던 Manage Sprint 권한은 있으나 Start/Complete sprints, Edit sprints 두 가지 권한이 추가되었네요.
앞으로는 스프린트를 시작, 완료하는 사용자와 삭제도 할 수 있는 사용자 등으로 나눠서 관리할 수 있겠습니다.

그 외의 데이터 센터 내용은 스킵합니다.
(관리자 기능이기도 하고 크게 소개할 내용은 없어 보여서 스킵합니다.)

Jira 8.7

2020년 2월에 릴리스한 버전입니다.

하이라이트 (Highlights)

  • Anonymizing users for GDPR compliance
  • PostgreSQL 11 support
  • OpenID Connect comes to Jira

GDPR 관련 내용, DB 시스템, OpenID(데이터 센터) 등에 대한 릴리스로 일반 유저를 위한 기능 업데이트는 없네요.
8.6 버전에 많이 업데이트하고 나서 안정화하는 버전이었는지 기능 추가는 없었네요.
다음 8.8 버전으로 넘어가겠습니다~

Jira 8.8

2020년 3월에 릴리스한 버전입니다.

하이라이트 (Highlights)

  • Revamped Audit log
  • Dates for future sprints
  • Jira loves accessibility
  • Access Data Center features on Server infrastructure

Revamped Audit log

데이터 센터 버전과 몇 가지 기능이 다를 수는 있겠지만 서비스 로그에 대해서 추가적으로 볼 수 있도록 기능이 개선되었습니다.

  • 어떤 로그를 어느 기간 동안 보관할 것 인지를 설정할 수 있습니다. (you can decide which events are logged and how long you want to keep them)
  • 로그들에 대해 더 자세히 알 수 있습니다. (you can filter the events, expand each for further details, and export the audit log if necessary)
  • 카테고리로 정리된 로그를 통해 로그 확인이 개선되었습니다. (by getting an audit log that’s clear and categorized, you don’t need to spend time browsing through piles of events.)
  • 나머지는 데이터 센터 내용이라서 스킵합니다.
    • 인스턴스와 관련한 로그를 확인할 수 있다는 내용과 3rd 파티 툴 연동 등에 대한 내용이 포함되어있습니다.

위 개선 사항들은 Administration> System > Audit log 에서 확인하실 수 있습니다.

Dates for future sprints

미래 스프린트를 위해 날짜 입력을 할 수 있도록 업데이트되었네요.
기존에는 스프린트에 날짜를 입력하도록 Required(필수 입력) 설정되어있었는데 미래 스프린트 계획을 위해 추가된 기능으로 보입니다.

Jira loves accessibility

https://confluence.atlassian.com/jirasoftwareserver/accessibility-998878998.html
개인 설정을 통해서 상태(Status)의 색/무늬를 변경할 수 있도록 할 수 있게 되었네요.
관련한 자세한 내용은 위 링크에서 보실 수 있습니다.

마무리

8.6 ~ 8.8 버전을 모두 살펴보았습니다.
8.6 버전에는 추가/수정된 기능들이 많았네요. 8.7, 8.8 버전은 안정화 업데이트 같은 느낌을 받았습니다.
한 달마다 버전 업데이트를 하고 있는데 버그 내용도 하나하나 보고 싶지만 이번 포스트에서는 스킵하고 다음 버전에서는 코멘트할 내용이 있을지 보겠습니다.

감사합니다. :)

Jira Software 8.5 release note

Jira Software 8.5 릴리스 노트

Jira Software 8.5.x 릴리스 노트: https://confluence.atlassian.com/jirasoftware/jira-software-8-5-x-release-notes-975014654.html

2019년 10월에 릴리스된 Jira Software 8.5 기능에 대해 살펴보는 포스트입니다.
위 릴리스 노트에서 자세한 내용을 보실 수 있으며, 이 포스트는 주관적인 생각을 담고 있습니다.

하이라이트 (Highlights)

  • Distribute the Jira Server mobile app to managed devices
  • New JVM check available
  • Hungry for new features?
  • API change log
  • Enterprise releases, performance-wise
  • Resolved issues

이번 8.5 릴리스는 하이라이트 리스트를 보면 새로운 피쳐는 없습니다.
이번 릴리스에서 중요한 것은 엔터프라이즈 버전이라는 것입니다.

Distribute the Jira Server mobile app to managed devices

jira server에서 모바일 기기에 따라 제한할 수 있도록 하는 기능이 추가되었네요.
관련 내용은 Mobile Device Management(MDM) 문서를 참고해주세요.

Enterprise release

릴리스 노트에 대해서 소개하려고 했는데 특별히 소개할 내용이 없네요.
앞서 말씀드렸듯이 엔터프라이즈 버전 릴리스라서 특별히 소개드릴 피쳐가 추가되지 않았습니다.
8.5 버전이 엔터프라이즈 버전이라는 의미는 중요한 보안, 안정성, 데이터 무결성 및 성능 문제를 해결하기 위해 8.5의 수명이 다할 때까지 버그 수정 릴리스를 제공한다는 의미입니다.

마무리

8.4 릴리스 소개 글에서는 8.5가 기대된다고 했는데 새로운 기능이 없는 릴리스였습니다.
다음 8.6, 8.7에는 무엇이 추가되었는지 다음 포스트에서 정리해보겠습니다~

Jira Bulk remove issue links (by link type)

Jira 이슈 링크(issue link) 삭제하기

관련 포스트: Bulk remove change Jira issue links
위 포스트에서는 이슈에 걸려있는 모든 링크를 삭제하는 것을 공유드렸었습니다.
이번 포스트에서는 이슈에 걸려있는 링크 중에 특정 타입의 링크를 삭제하는 방법을 공유해보겠습니다.

이슈 - 이슈 링크

Jira에서 이슈와 이슈를 연결해주는 이슈 링크,
전의 포스트에서는 링크를 그냥 다 삭제하는 포스트였기에 자세히 다루지는 않았지만 이번 포스트에서는 링크 타입에 대해 알아야 정확하게 삭제할 수 있기에 조금 더 자세히 설명해보고자 합니다.

Administration > issues > Issue linking 설정 화면

위와 같이 이슈 링크 속성에는 Name, Outward Description, Inward Description 항목이 있습니다.

한국어 버전으로는 이슈 링크 속성 이름이 명확한지 모르겠지만 다음과 같네요. 이름(Name), 가르키는 입장 설명(Outward Desc), 받는 입장 설명(Inward Desc)

Jira 시스템에 기본적으로 있는 이슈 링크 타입은 4개로 Blocks, Cloners, Duplicate, Relates 이렇게 구성되어 있습니다.
각각 링크 타입 항목들을 보면 이슈와 이슈를 연결했을 때 각 이슈에 보이는 링크의 이름이 다르게 보일 수 있도록 설정할 수 있습니다.

이슈 링크를 설정하고 어떻게 보이는지 아래의 문서 링크를 참고하시면 좋을 것 같습니다.
(EN) Jira Docs: linking issues

“이슈 - 이슈 링크”의 관계를 정리해보자면, 아래와 같이 볼 수 있겠습니다.

  • 이슈는 목적지
  • 이슈 링크는 출발지와 도착지 정보를 가지고 있는 화살표

이슈 링크 타입 확인해보자

개념적인 설명은 이만 마치고 스크립트를 통해 이슈에 있는 이슈 링크들을 한번 확인해보겠습니다.
우선 테스트를 위해 이슈에 설정한 이슈 링크들은 아래와 같습니다.

PUB-16 issue link 설정

링크된 항목들을 정리해보면 다음과 같습니다. 괄호 내용은 이슈 링크 이름입니다.

  • PUB-16 (blocks) PUB-1
  • PUB-16 (blocks) PUB-2
  • PUB-16 (blocks) PUB-3
  • PUB-16 (clones) PUB-5570
  • PUB-16 (duplicates) PUB-17
  • PUB-16 (is blocked by) PUB-4

PUB-16 이슈에 연결된 이슈 링크들을 확인하기 위한 스크립트 입니다.
스크립트를 ScriptRunner에 Script console에서 실행된 내용을 볼 수 있습니다.

스크립트 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.query.Query

def searchService = ComponentAccessor.getComponent(SearchService)
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def results = searchService.search(user, jqlQueryParser.parseQuery("key=PUB-16"), PagerFilter.getUnlimitedFilter())
def issueManager = ComponentAccessor.getIssueManager()
def issueLinkManager = ComponentAccessor.getIssueLinkManager()

results.getResults().each
{
def issue = issueManager.getIssueObject(it.id)
log.warn("Get InwardLinks")
def linkInwardList = issueLinkManager.getInwardLinks(issue.getId())
linkInwardList.each {
log.warn("${it.getIssueLinkType().getName()}, ${it.getSourceObject().getKey()}")
}
log.warn("Get OutwardLinks")
def linkOutwardList = issueLinkManager.getOutwardLinks(issue.getId())
linkOutwardList.each {
log.warn("${it.getIssueLinkType().getName()}, ${it.getDestinationObject().getKey()}")
}
}

스크립트 실행 결과

1
2
3
4
5
6
7
8
...: Get InwardLinks
...: Blocks, PUB-4
...: Duplicate, PUB-17
...: Get OutwardLinks
...: Blocks, PUB-1
...: Blocks, PUB-2
...: Blocks, PUB-3
...: Clones, PUB-5570

이슈 링크 타입에 따라 이슈 링크를 삭제해보자

이슈 링크 타입을 확인했으니 이슈 링크 타입에 따라 삭제할 수 있게 되었습니다.
사실 위 링크 확인 스크립트 코드에서 타입inward/outward 만 확인해서 이슈 링크 삭제 함수만 사용하면 우리가 원하는 링크 삭제가 가능합니다.

이슈 링크 타입 확인 & 삭제

이슈 링크 타입을 확인하는 것 자체는 어렵지 않습니다.
issueLinkObj.getIssueLinkType().getName()로 이름을 확인하면 되니까요.
다만 Inward, Outward 링크 타입을 확인해야하는데, 삭제할 때에 아래 옵션을 선택할 수 있도록 함수를 만들어야겠네요.

  • Inward 링크만
  • Outward 링크만
  • 모든 링크

삭제 함수도 간단합니다. 참고: Jira API Docs: IssueLinkManager.removeIssueLink()
아래 함수를 위에서 확인한 이슈 링크를 파라미터로 호출하면 링크 삭제가 가능합니다.

1
2
3
// issueLink - the issue link to remove
// remoteUser - needed for creation of change items
void removeIssueLink(IssueLink issueLink, ApplicationUser remoteUser)

스크립트 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.query.Query
import com.atlassian.jira.issue.MutableIssue

def searchService = ComponentAccessor.getComponent(SearchService)
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def issueManager = ComponentAccessor.getIssueManager()
def issueLinkManager = ComponentAccessor.getIssueLinkManager()

def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
// NOTE: jql options
def results = searchService.search(user, jqlQueryParser.parseQuery("key=PUBGTEST-3"), PagerFilter.getUnlimitedFilter())

// NOTE: remove link options
def removeLinkType = "Blocks"
def removeLinkIO = "all" // all, inward, outward

def removeInwardLinks = {MutableIssue issue ->
def linkInwardList = issueLinkManager.getInwardLinks(issue.getId())
linkInwardList.each {
def link = it
if (link.getIssueLinkType().getName() == removeLinkType) {
log.warn("removed links: ${link.getIssueLinkType().getName()}, ${link.getSourceObject().getKey()}")
issueLinkManager.removeIssueLink(link, user)
}
}
}
def removeOutwardLinks = {MutableIssue issue ->
def linkInwardList = issueLinkManager.getOutwardLinks(issue.getId())
linkInwardList.each {
def link = it
if (link.getIssueLinkType().getName() == removeLinkType) {
log.warn("removed links: ${it.getIssueLinkType().getName()}, ${it.getDestinationObject().getKey()}")
issueLinkManager.removeIssueLink(link, user)
}
}
}

results.getResults().each {
def issue = issueManager.getIssueObject(it.id)
if (removeLinkIO == "all" || removeLinkIO == "inward") {
log.warn("Get & Remove InwardLinks")
removeInwardLinks(issue)
}

if (removeLinkIO == "all" || removeLinkIO == "outward") {
log.warn("Get & Remove OutwardLinks")
removeOutwardLinks(issue)
}
}

스크립트 결과

현재 스크립트 상으로는 all(inward, outward), blocks 타입의 링크만 삭제하도록 구성되어 있어 실행시 blocks 타입의 링크가 모두 삭제됩니다.

활용

위 스크립트를 활용시에는 NOTE: 라고 표시된 내용에 링크 삭제가 필요한 이슈, 링크 타입을 알맞게 변경을 한 뒤에 사용하시면 됩니다.
이슈 링크 삭제 시에 주의해서 사용해주세요!

마무리

이번 내용은 약간 길어졌는데요. 포스트를 작성하면서 이슈와 이슈 링크의 관계, 이슈 링크의 속성 등에 대해서 공부할 수 있어서 좋았고 이 글을 보시는 다른분들도 스크립트를 이용하여 원하는 이슈 링크를 삭제할 수 있었으면 좋겠습니다.
감사합니다. 😀

Bulk remove change Jira issue links

Jira 이슈에 연결되어있는 이슈 링크 한번에 삭제하기

참고: https://community.atlassian.com/t5/Jira-questions/Bulk-remove-change-issue-links-in-Jira/qaq-p/659381

문제 인식

최근 특정 Jira 이슈에 연결된 이슈들을 삭제해야하는 일이 있었습니다.
(한 작업 이슈에 확인한 버그를 모두 링크를 달고 링크된 버그 이슈들을 보다가 링크 타입이 잘못된 것도 있는 등의 이슈가 있어 수정이 필요했습니다.)
Bulk로 링크들을 삭제하는 기능이 있는지 찾아보았는데 없더군요. 그래서 스크립트러너로 가능한지 찾아보았습니다.

하나하나에 커서를 놓고 지워야합니다

다행히, 당연하게도 이미 같은 고민을 했던 사람들이 있었고 아틀라시안 커뮤니티 채널에 해결방법이 있었습니다.
기본 Jira 기능에는 없지만 스크립트러너를 사용해서 가능하다는 것이었죠.

제가 현재 사용하고 있는 Jira 버전은 8.5여서 위 링크의 8.x 코드를 보면서 설명해보고자 합니다.
(위 링크에 7.13 버전에서 사용할 수 있는 코드도 있으니 참고해서 쓰시면 됩니다.)

문제 해결 방법 (ScriptRunner)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.query.Query

def searchService = ComponentAccessor.getComponent(SearchService)
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def results = searchService.search(user, jqlQueryParser.parseQuery("Your JQL Filter"), PagerFilter.getUnlimitedFilter())
def issueManager = ComponentAccessor.getIssueManager()

results.getResults().each
{
def issue = issueManager.getIssueObject(it.id)
log.warn(issue.key)
// get all linked issues
log.warn(ComponentAccessor.issueLinkManager.getLinkCollection(issue, user).getAllIssues())
ComponentAccessor.issueLinkManager.removeIssueLinks(issue, user)
}

로그 관련한 코드는 설명 중 불필요하여 삭제했습니다. 실제 코드 동작하는데에 영향이 없습니다.
사실 코드 상으로는 크게 어려운 부분이 없습니다.

스크립트 Flow

  1. 검색, JQL 파서, 사용자, 이슈 컨트롤러를 정의한다. (검색 및 설정 준비 과정)
  2. JQL을 통해 이슈들을 가져온다.
  3. 각 이슈들의 모든 링크를 삭제한다.

issueLinkManager 인터페이스 설명은 jira/docs/api/8.5.1/…/IssueLinkManager 이 문서에서 볼 수 있습니다.
이 매니저에는 여러가지 함수들이 있습니다. 이슈 링크의 생성, 삭제, 조회, 변경 등이 가능합니다.

removeIssueLinks() 함수도 위 issueLinkManager에서 볼 수 있는데요.

1
2
3
4
5
6
int removeIssueLinks(Issue issue, ApplicationUser remoteUser)
// Parameters:
// issue - the Issue
// remoteUser - the remote user
// Returns:
// The total number of issuelinks deleted.

모든 링크를 삭제하고자하는 이슈와 삭제할 때 필요한 사용자를 받아 함수가 동작합니다.

스크립트 결과

맨 처음 이미지를 보여드렸던 이슈의 키를 JQL로 입력하고 실행해보겠습니다.
“key=PUBGTEST-112”로 입력하고 스크립트 콘솔에서 테스트 해보았습니다.

Logs:

1
2
2020-02-23 02:16:42,545 WARN [runner.AbstractScriptRunner]: PUBGTEST-112
2020-02-23 02:16:42,545 WARN [runner.AbstractScriptRunner]: [PUBGTEST-75, PUBGTEST-111, PUBGTEST-225]

Timing: Elapsed: 4949 ms / CPU time: 531 ms
동작하는데 생각보다 시간이 많이 걸리긴 하네요.
(약 5초 정도 걸리는 것으로 보이는데 링크 삭제가 오래걸리는 것인지 다른 것이 오래걸리는 것인지는 봐야겠습니다.)

실행 결과로는 이슈의 히스토리에 아래와 같이 남았습니다.
삭제 완료!

링크가 걸려있는 이슈의 모든 이슈 링크들이 삭제되었습니다! 👍

문제 해결!

제가 했던 하나의 이슈만 링크를 삭제할 수도 있고 JQL로 검색된 모든 이슈들의 모든 링크를 삭제할 수 있습니다.
다만 여기서 제가 원했던 것은 모든 링크의 삭제가 아니라 특정 타입의 링크들만 삭제하고 싶었던 것이어서
다음 포스트에서는 특정 링크 타입의 링크를 삭제하는 내용으로 한번 더 다뤄봐야겠습니다.

다음 포스트에서 만나요! :)