Jira Software 8.1 릴리스 노트

Jira Software 8.1 릴리스 노트

Jira Software 8.1.x 릴리스 노트: https://confluence.atlassian.com/jirasoftware/jira-software-8-1-x-release-notes-966669112.html

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

하이라이트

하이라이트 기능으로는 아래 리스트와 같습니다. 하나하나 살펴보겠습니다!

  • Issue archiving (Jira Data Center)
  • Managing old components
  • Development info on issue cards
  • Flexible boards
  • More performance improvements
  • Jira Data Center on Microsoft Azure
  • New JMX metrics
  • Small improvements to make your day
  • Resolved issues

Issue archiving (Jira Data Center)

Issue archiving

위 이미지 처럼 이슈를 아카이브 할 수 있는 기능입니다. 다만 Data center만 가능한 기능입니다.
자세한 내용은 아래 링크를 참고하세요.
https://confluence.atlassian.com/adminjiraserver/archiving-an-issue-968669980.html

Managing old components

Managing old components

기존에는 컴포넌트를 삭제하는 방식으로 컴포넌트를 관리할 수 있었는데 한가지 추가 옵션이 생겼습니다.
아카이브하여 해당 컴포넌트는 아카이브되었다는 것을 보여줄 수 있게 되었네요.
입력된 컴포넌트가 아카이브될 경우, 선택 옵션에서는 선택할 수 없으나 이미 입력된 것은 유지됩니다.

Development info on issue cards

이제 칸반, 스프린트 보드에서 이슈 카드에서 커밋되었거나 브랜치가 생성된 내역을 볼 수 있습니다.
이 기능은 커밋 내역을 트래킹하여 보여주는 서비스가 연결되어 있을 경우 볼 수 있겠군요.
(예: Fisheye, Crucible, Bitbucket)

이미지 상으로는 커밋 내역과 브랜치, 리뷰가 완료되었는지 진행 중인지 알 수 있겠네요.
배포 관련 내용은 bitbucket과 관련 내용인지 봐야할 것 같기는 합니다.
(정확한 것은 모르겠지만 아틀라시안 제품과 연동이 잘 되어 있을 것으로 예상합니다)

Flexible boards

보드에서 오른쪽에 이슈 카드의 디테일 내용을 볼 때 가로의 크기가 정해져 있어 보기 힘들었던 것을
옆으로 늘려서 볼 수 있도록 개선한 내용입니다. (QoL 내용 같네요. ㅎㅎ)

More performance improvements

항상 열심히 성능 개선에 힘쓰고 있는 아틀라시안!
이번에도 성능 개선 소식이 있네요.

보드 피커 개선

보드 페이지를 열 때 마다 모든 보드 리스트를 가져왔는데 그렇게 하지 않도록 개선했다고 합니다.
보드를 고를 때는 차이가 나지 않지만, 다른 페이지에서는 성능 상 효과가 있을 것이라고 하네요. :)

이슈 카드 색깔 설정 속도 개선

보드에서 JQL에 따라 카드에 색깔을 넣을 수 있는 기능을 개선했다는 내용입니다.
내부 로직을 개선한 내용으로 색깔을 입히는데에 더 효율적으로 계산한다고 하네요.

Jira Data Center on Microsoft Azure

Jira Data Center 버전-MS Azure 배포 템플릿을 개선했다고 합니다.
(사실 데이터 센터 버전을 사용하지 않아서 잘 모르겠지만 8.1 버전 외에 다 적용되는 사항이라고 합니다.)

New JMX metrics

Jira 성능을 보기 위해서 JMX라는 매트릭스를 도입했다고 합니다.
자세한 것은 이 링크(Live monitoring using the JMX interface)에 있네요.
다만 이 기능은 모니티링도 성능에 영향을 줄 수 있으니 1초에 한번정도만 새로고침하라고 경고하네요. :)
기능을 켜면 Administration > System > System info 밑에 Instrumentation이라는 메뉴가 나타납니다.

Instrumentation: 많은 성능 관련 내용을 볼 수 있습니다.

Small improvements to make your day

작은 개선 사항이지만 우리에게는 꿀맛같은 개선사항입니다.
(이번에는 그렇게 많지는 않군요.)

Sorting projects by columns

이미지 처럼 각 컬럼 별로 여러 프로젝트를 소팅해서 볼 수 있습니다.
프로젝트가 많지 않으면 와닿지 않겠지만 프로젝트가 많을 경우에는 좋을 것 같네요!

Additional custom fields in batched email notifications

특정 커스텀 필드를 이메일 알림에 포함하는 것을 조정할 수 있는 기능이 추가되었다고 합니다.
기능은 심플한데 설정하기에는 까다로운 것 같네요. 참고 링크
나중에 한번 해보고 정리해서 따로 포스트 작성해보겠습니다.

그 외에는 계정 로그인, 로그아웃 시간을 볼 수 있는 기능과 아바타 이미지가 추가된 것이 있네요.
버그 수정 사항은 따로 다루지 않겠습니다.

마무리

8.0에도 변경사항이 많았는데 8.1도 변경 사항이 많았네요.
글을 작성하면서 QoL이 되었으면 하는 것 중 프로젝트 별 이슈 필드 리스트 개선이 언젠가는 생기겠지하는 생각을 했네요.
잡생각을 마무리하며, 포스트 마치겠습니다.

What is Dev PM

개발 PM(Project Manager) 리서치

이직하는데에 필요한 정보와 커리어 전환이 괜찮은가에 대해 조사해보았습니다
재작년 말에 개발자에서 PM으로 이직을 준비하면서 작성한 문서를 조금 다듬어 포스트합니다

전에는 개발 PM이라고 했을 때, 개발 = Tech로 생각했었는데 지금 다시 생각해보면
개발이 잘 이뤄질 수 있도록 하는 Dev(Development)가 맞는 것 같아 당시 작성했던 내용을 정정했습니다
(사실 기술 PM도 어떤 일을 하는지, 어떤 일을 해야하는지 나중에 정리해보겠습니다)

리서치한 내용

  • 개발 PM(Development Project Manager)이란 무엇인가
  • 현재 개발 PM을 뽑는 곳이 있는가
  • 향후 5, 10년 내에 개발 PM의 이력을 살려서 이직을 할 수 있는가
  • 개발 PM이 미래가 있는가
  • 개발 경력이 있는 주니어 개발자가 개발 PM이 되는 것에 대한 의문
  • 개발 PM이 되려면 필요한 능력

개발 PM(Development Project Manager) 이란 무엇인가

우선 프로젝트 매니저의 정의는 아래와 같습니다

한시적인 일을 수행하는 데 있어서 관리 방법론(통합, 범위, 시간, 원가, 품질, 인력, 의사소통, 위험, 조달관리)에 따라 가장 효율적으로 추진하는 것으로 프로젝트의 계획과 실행에 있어서 종합적인 책임을 가진 직책 또는 직무

여기에 개발(Development) 속성을 추가해서 찾아보면 핵심 역량(Key Responsibilities)은 아래와 같습니다.
(EA Korea, Development Manager 직군 채용 정보)

  • Development Director, Technical Director, Producer를 도와 서비스 개발 일정을 맞춤
  • Development Director를 도와 프로젝트 위험 요소를 파악하고 대응
  • 서비스 개발 일정을 확인하고 현재 상황을 알림
  • 서비스 개발 이슈를 발견하여 해결하거나 보고
  • 팀 외부 관계자와 커뮤니케이션을 담당
  • 회의를 주관하고, 결론 및 추적해야 할 사항을 정리

게임 개발 PM서비스 개발 PM 과는 차이가 있겠지만 대략 위와 같다고 볼 수 있습니다
국내에는 서비스 개발 PM의 개념을 찾기 힘듭니다 (Product Manager + Project Manager가 합쳐진 형태)

현재 국내/국외 개발 PM을 뽑는 곳이 있는가

(Product Manager 개념과 혼동되는 곳은 제외)

  • 라인 Plus - Technical Project Manager
  • 넥슨 - 분석팀 2개
  • 블리자드 - 상하이
  • EA Korea - Development Manager | Associate Development Manager 라는 분야가 있음
  • PUBG Corp - 개발 Project Manager
  • 스타트업(10개 이상 존재, 주로 CTO 업무와 많이 겹침)

향후 5, 10년 내에 개발 PM의 이력을 살려서 이직을 할 수 있는가

이직을 할 수 있는가에 False에 대한 케이스를 보면될 것 같습니다.

  • 개발 PM이라는 직군이 사라지거나 굉장히 적어져서 이직을 하기 힘듬
  • 내 경력이 부족해서 이직을 하기 힘듬

개발 PM이라는 직군이 사라지거나 굉장히 적어져서 이직을 하기 힘듬

개발 PM이라는 직군이 미래에도 존재할지 찾아보았지만
몇몇의 필요성이 있다는 글을 보았지만 없어지지 않을 것이라는 글은 모르겠습니다
(어떤 직군, 직업이든 없어질 수는 있다고 생각합니다)

http://www.blog.greenprojectmanagement.org/index.php/2016/07/12/the-future-of-project-management/
이 글에서의 결론만 본다면 아래와 같습니다. (글 중간에 이야기한 내용은 잘 모르겠습니다)

우리는 프로젝트 및 프로젝트 관리자의 필요성에 대한 성장을 논의했습니다. 우리는 프로젝트 관리자가 현재 시스템에 집중하지 않는 고유한 역량 및 기술 세트를 보여줘야 함을 입증했습니다. 추세는 프로젝트 관리가 예측 가능한 미래를 위한 실행 가능하고 인기있는 직업임을 나타냅니다! - (Google Translation)

프로젝트는 분명히 있을 것이고 그에 따른 프로젝트 매니저는 프로젝트의 효율성 등을 감안했을 때
프로젝트 매니저가 필요없을 일은 없겠구나 하는 생각이 드네요
(다만 프로젝트 매니저가 잡다한 일을 할 수도 있겠구나하는 생각도 동시에 듭니다)

내 경력이 부족해서 이직을 하기 힘듬

경력이 부족해서 이직을 하기 힘들다 라는 가정은 이 정도가 될 것 같습니다

  • 경력을 제대로 가꾸지 않았다
  • 중간에 잘려서 경력이 끊겼다
  • 어중간한 경력으로 이직을 하기 힘들다

사실 위의 3가지 모두 개인의 성장력과 연관이 있다고 생각합니다
만약 PM으로 전환한다면 어떻게 경력을 쌓아갈 것 인가에 대해 고민하는게 맞는 것 같습니다

개발 PM이 미래가 있는가

앞에서 개발 PM 직군의 향후 미래에 대해서 조사를 했는데 미래가 없어 보이지는 않았습니다
미래 개발자 수나 프로젝트 수를 알 수 없듯이 먼 미래를 알 수는 없지만 프로젝트는 진행될 것이며 PM은 존재할 것이라고 생각합니다
우려되는 점은 개발 방법론, 기술의 발전으로 개발 PM의 필요성이 줄어들고 있다는 우려도 볼 수 있었는데 어쩌면 프로젝트 관리, 인력 관리 등 관리에 대한 직무가 흔들릴 수 있다고는 생각이 드네요

개발 경력이 있는 주니어 개발자개발 PM이 되는 것에 대한 의문

서비스 개발 경력이 있고 컴퓨터 공학(컴퓨터 과학)을 전공한 PM이 경쟁력이 있다는 조언은 들었습니다
여기서 의문점은 개발 경력을 3년 또는 5년까지 쌓고 PM으로 전환하는게 좋지 않나? 라는 의문이 있습니다

저는 현재 약 2년의 개발자 경력을 가지고 있는데 아래와 같은 의문들이 있습니다

  1. 개발자로 경력을 더 쌓고 후에 전환을 한다면 더 좋은 PM을 할 수 있지 않을까?
  2. 이 경력으로 개발 PM으로써 충분히 퍼포먼스를 낼 수 있을까?
  3. 문서화나 업무의 경우는 같이 일하는 분들과 일하면서 충분히 배울 수 있지만, 개발자라 더 어려운 점이 있을듯?
  4. 경력이 부족함에 있어서 같이 개발하는 분들이 PM을 신뢰하기 힘든 상황이 있지 않을까?

1번 고민을 제외하고는 전환 후에 일하면서 배울 수 있는 부분이라고 생각합니다 (1번은 근본적인 고민)

PM으로 전환한다면 개발을 할 수 없는 것은 아니지만 개발자 커리어로 연속적인 커리어 관리가 힘들다는 점
하지만 3~5년 뒤에는 PM을 하고 싶었다는 점. 지금 도전해보는 것도 나쁘지 않을 것 같다는 점

경력, 개인의 성장은 회사 업무와 개인의 적성이 정렬되었을 때 성장이 폭발한다고 생각합니다
그리고 이 성장은 회사가 챙겨주지 않고 개인이 챙겨야 하는 것으로 생각합니다

1번에 대한 고민은 전환을 하거나 하지 않더라도 계속 있을 고민인 것 같습니다
현재 전환이 확정되지 않은 상태에서 고민하기보다 전환을 도전해보는 것이 좋지 않을까 합니다

개발 PM이 되려면 필요한 능력

개발 PM이 되려면 필요한 능력은 위에서 적어둔 그대로 보면되지 않을까 합니다

  • 원활한 커뮤니케이션 능력
  • 도메인 지식이 많아야 함 (프로젝트에 대한 도메인 지식)
  • 개발 프로세스, 개발 방법론에 대한 이해도
  • 컴퓨터 전공 지식이 있으면 좋음
  • 개발 우선순위, 일정 관리, 스펙 관리, 리소스 관리에 있어 최적의 효율성을 달성할 수 있는 역량
  • 조직 내 발생할 수 있는 다양한 상황에 대한 대처 및 해결 능력뿐만 아니라, 개발 과정에서 발생할 수 있는 문제에 침착하게 대응 할 수 있는 역량

(위의 항목은 PUBG Development Project Manager 자격 조건을 몇가지 가져왔습니다)

리서치 후기

당시 PUBG Dev PM으로 이직하기 위해 리서치했던 문서를 정리해보았습니다
막연하게 생각해왔던 것들을 정리해보는 좋은 시간이었습니다

같이 개발하는 팀원들이 힘들지만 즐겁고 효율적으로 같이 성장할 수 있도록 돕고 싶다!

지금도 같은 생각으로 PM 업무를 하고 있고 더 좋은 개발환경, 프로세스를 만들고자 합니다

최근 들은 개발 PM 이야기 중 가장 깔끔했던 발표 공유를 마지막으로 포스트 마무리하겠습니다

이해봄님 2019 NDC 발표, 개발 PM-전지적 참견시점

Jira 7.11 to 8.0 Upgrade

Jira 7.11 to 8.0 Upgrade Specs

Jira Software(서버 설치버전)을 사용하면서 7.11에서 8.0으로 버전 업그레이드될 때
정리해보았던 내용을 포스트해봅니다.

사전 참고 링크

  • Jira 릴리즈 노트: Jira Software release notes
    • 각 버전별 릴리즈 노트를 볼 수 있으며 버전별 업그레이드 문서도 함께 있습니다
  • Jira 버전별 업그레이드 매트릭스: Upgrade matrix
    • 각 업그레이드 버전 항목 별로 간단하게 내용이 정리되어있는 표가 있습니다

각 버전 별 변경 사항

사내에서 기존에 사용했던 Jira 버전은 7.11 버전이었는데 8.0으로 업그레이드했습니다
이 업그레이드에는 7.12, 7.13, 8.0 수정사항이 모두 반영되어서 변경 사항에 대해 정리해보았습니다
각 변경 내용은 릴리즈 노트에 기반하여 정리하였습니다

7.12 변경 내용

jira-software-7-12-x-release-notes

New look and feel of the Custom fields page

custom field

  • 어드민 기능 수정 내용으로 설정 > Fields > Custom fields 간략하게 볼 수 있는 내용
  • 커스텀 필드가 적용된 프로젝트, 스크린을 한가득 보던 화면을 최적화해서 어드민 QoL 기능

Share edit rights for filters and dashboards

filter editors

  • 필터 수정 권한을 추가로 설정할 수 있는 기능 추가
  • 필터를 다른 사람도 수정할 수 있게 된 것이 매우매우 좋다!

More search power

  • Development 관련 검색 기능 추가 (Open PR, Merged PR, Failling builds, Passed builds 등등)
  • 작업이 어떻게 진행되고 있는지 파악하기 좋을 것으로 보임

Boost Jira performance

  • 보드에 있는 이슈의 수를 보여주는 것이 느리게 만드는 데 그 숫자를 안보이게하면 빠르게 할 수 있음
  • 컬럼에서 얼마나 머물러 있었는지 볼 수 있는 내용도 끌 수 있는데 끄면 성능을 개선할 수 있음
  • 다만 이 기능을 사용할 경우 보드에서 이슈가 얼마나 있는지, 얼마나 그 상태에 머물러 있었는지 알 수 없어서 불편할 것으로 예상됨

그 외의 버그 수정 다수

7.13 변경 내용

jira-software-7-13-x-release-notes

  • AdoptOpenJDK 8 comes to Jira
    • 내부 개발 플랫폼 내용이라 자세히 알 필요는 없음
  • End of year Enterprise release roundup
    • 공식 릴리즈에 대한 이야기
  • Enterprise releases, performance-wise
    • 성능 향상 - performance-and-scale-testing-966063698.html
    • 7.12와 비교했을때 눈에 띄는 성능 향상은 아니지만 7.6 버전에 비하면 성능 향상이 이뤄졌음
    • (하지만 기존에 사용하고 있던 버전도 낮은 버전은 아니어서 큰 성능 차이를 느끼지 못했습니다)

8.0 변경 내용

jira-software-8-0-x-release-notes

Look and feel: Scrum and Kanban

Look and feel: Scrum and Kanban

  • 보드의 외형이 바뀌었음
  • 카드 정보를 어떻게 설정하여 보여줄 수 있을지 봐야할 것

Better email notifications

Better email notifications

  • 이메일이 너무 많이 와서 압도되는 것을 줄여보고자 했음
  • 예시로는 10분간의 알림 사항을 모아서 메일주는 것을 보여줌
  • 설정 > System > Batching email notifications 에서 설정 가능
  • 댓글의 수정 내용이 계속 오는 것이 아닌 정리되서 와서 좋았던 기능

Significant backlogs load faster

Significant backlogs load faster

  • 백로그 로딩 시간이 줄어들었음
  • 몇개를 샘플링해서 보여주고 추가적으로 로딩할 수 있도록 하여 로딩 속도 개선한 것으로 보임

Dropping Linked pages count to boost performance

  • 이슈에 링크되어있는 페이지의 숫자를 보여주지 않는 것으로 성능 향상

New priority icons

  • 새로운 priority 아이콘 추가 (리뉴얼 되었음)
  • Find authors (updatedBy)
    • UpdatedBy() guide
    • 어떤 사용자가 업데이트했는지 알 수 있음. 추가로 특정 시간부터 또는 특정 시간 동안 수정했는지 알 수 있음.
  • Find link types (issueLinkType)

Massive performance improvements

  • 보드, 백로그가 보이는데 걸리는 시간이 62%, 87%까지 빨라졌음
  • JQL 프로세싱 과정은 33% 빨라졌음
  • 보드 브라우징은 16% 빨라졌음

Faster indexing

  • 리인덱싱 속도가 71% 빨라졌음
  • 인덱스의 크기가 줄어들어 인덱싱에 부담을 덜었음
  • 인덱싱 관련 최적화가 되었음
  • (실제로도 각 프로젝트에서 인덱싱할 때에 다른 프로젝트에서 영향 받지 않고 빠르게 된 것을 확인했습니다)

REST API for issue type schemes

Misc(Bonus resources)

  • Small improvements to make your day
    • 4 Byte characters 지원
    • add-ons → apps 이름 변경
    • Using sprints when your backlog isn’t sorted by rank (백로그가 rank로 정렬되지 않아도 스프린트 사용 가능)
  • 성능 및 스케일 테스트
  • 보안 관련 페이지
  • JIRA Server mobile App 지원 (베타 앱으로 지원되고 있어서 베타로 깔아야 함)
  • 그 외의 버그 수정 다수

업그레이드 버전 별 정리 후기

PM 업무를 하면서 Jira를 어떻게하면 더 잘 사용할 수 있을지, 개발 프로세스에 어떻게 잘 녹여낼지
고민하다보니 Jira 시스템도 많이 보게되어 정리하게 되었네요.
8.0 업그레이드를 했으니 곧 8.1, 8.2 업그레이드 릴리즈 노트도 정리해서 포스트 해보겠습니다.

Jira 8.0 & ScriptRunner로 JQL issue 가져오기

Jira 8.0 & ScriptRunner로 JQL issue 가져오기

최근에 ScriptRunner로 JQL 결과 이슈 가져오기 스크립트를 찾아보고 실행해보려 했는데 잘 안되서 포스트를 작성해보았습니다.
(다른분들도 같은 문제를 겪을 것 같아서..!)

스크립트러너 문서에서의 코드는 링크에서 확인하시면 좋을 것 같습니다.
ScriptRunner Doc: running-a-jql-query

위 링크에 있는 코드에서 몇몇 Deprecated 코드를 수정하면 다음과 같은 코드로 정리해볼 수 있습니다.

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
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.search.SearchProvider;
import com.atlassian.jira.jql.parser.JqlQueryParser;
import com.atlassian.jira.web.bean.PagerFilter;

def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser);
def searchProvider = ComponentAccessor.getComponent(SearchProvider);
def issueManager = ComponentAccessor.getIssueManager();
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();

// edit this query to suit
def query = jqlQueryParser.parseQuery("project = JRA and assignee = currentUser()");

def results = searchProvider.search(query, user, PagerFilter.getUnlimitedFilter());

log.debug("Total issues: ${results.total}");

results.getIssues().each {documentIssue ->
log.debug(documentIssue.key);

// if you need a mutable issue you can do:
def issue = issueManager.getIssueObject(documentIssue.id);

// do something to the issue...
log.debug(issue.summary);
}

문제의 시작

그런데..
이 코드를 Script Console에서 실행해보면 아래와 같은 에러가 발생합니다.

1
2
3
groovy.lang.MissingMethodException: No signature of method: com.atlassian.jira.issue.search.providers.LuceneSearchProvider.search() is applicable for argument types: (com.atlassian.query.QueryImpl, com.atlassian.jira.user.DelegatingApplicationUser, com.atlassian.jira.web.bean.PagerFilter) values: [{project = "JRA"} AND {assignee = currentUser()}, pineoc(pineoc), ...]
Possible solutions: search(com.atlassian.jira.issue.search.SearchQuery, com.atlassian.jira.web.bean.PagerFilter), search(com.atlassian.jira.issue.search.SearchQuery, com.atlassian.jira.web.bean.PagerFilter, java.util.Set), search(com.atlassian.jira.issue.search.SearchQuery, org.apache.lucene.search.Collector), each(groovy.lang.Closure)
at Script1071.run(Script1071.groovy:14)

에러를 요약해보자면..

  • LuceneSearchProvider에 그런 메서드가 없다.
  • search(.issue.search.SearchQuery, .web.bean.PagerFilter) 요런 형식이어야하는데
  • search(.query.QueryImpl, .user.DelegatingApplicationUser, .web.bean.PagerFilter) 요렇게 부르고 있어서 안되는거다.
  • 파라미터 형식이 너무 길어서 생략하겠습니다. (com.atlassian.jira 등이 앞에 붙어있었습니다.)

에러 내용만 봤을 때는 잘못된 파라미터로 인해 함수를 호출하지 못한다고 합니다.
공식 가이드 문서로 보고 진행했는데 에러가 나서 잠시 당황했지만 파라미터를 확인해보았습니다.

문제 파악

searchProvidersearch() 함수에는 다음과 같은 파라미터가 들어가야한다고 합니다.
JIRA API docs(8.0.2)-LuceneSearchProvider

  • com.atlassian.jira.issue.search.SearchQuery
  • com.atlassian.jira.web.bean.PagerFilter

근데 가이드 문서에서 사용했던 함수에는 아래와 같은 파라미터를 사용했습니다.
JIRA API docs(7.0.5)-LuceneSearchProvider

  • Query query
  • ApplicationUser searcher
  • PagerFilter pager

위 처럼 찾아보는 과정에서 LuceneSearch 쪽 업데이트가 있어 함수 변경이 있었습니다.
그 업데이트가 Jira 8.0 버전으로 올라가면서 반영된 것 같습니다.
ScriptRunner는 Jira 8.0을 지원한다고 했지만 문서는 아직 지원하지 않는 것 같네요. (…)

참고

문제 해결 시도

그래도 결과를 찾아봐야하니까 문제를 해결해봅니다.

아래와 같이 코드를 수정하여 스크립트 콘솔에 적용해보았습니다.
변경된 내용 및 이유도 함께 적어둡니다.
(바로 적용해볼 수 있는 코드는 아래에 있으니 바로 사용해보시면 될 것 같습니다.)

  • searchProvider.search() 함수도 앞서 설명한 것 처럼 메서드를 확인하여 변경했다.
  • results.getIssues() 함수는 Jira 8.0.x에 더 이상 존재하지 않았다.
    • SearchResults에 함수에는 getResults() 함수가 존재한다.
    • getResults() 함수는 List를 반환하는데 DocumentWithId List를 반환한다. (참고 링크 - search 함수)
    • DocumentWithId 클래스에는 getDocument() 함수가 있는데 이 함수로 Document에 접근할 수 있다.
    • Document 오브젝트는 org.apache.lucene.document.Document 메서드를 사용하여 데이터를 접근할 수 있다. (참고 링크 - Document 메서드)
    • Document.getField(“key”) 로 접근하여 이슈의 키를 얻을 수 있다. (ex: JRA-1)
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
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.jql.parser.JqlQueryParser;
import com.atlassian.jira.issue.search.SearchProvider;
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.search.SearchQuery;

def findIssues(String jqlQuery) {
def issueManager = ComponentAccessor.issueManager;
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser);
def searchProvider = ComponentAccessor.getComponent(SearchProvider);
def query = jqlQueryParser.parseQuery(jqlQuery);
def searchQuery = SearchQuery.create(query, user);

// search 함수를 type 에 맞게 수정해주었다.
def results = searchProvider.search(searchQuery, PagerFilter.getUnlimitedFilter());
log.warn "issue cnt: ${results.getTotal()}"; // query로 얻은 이슈의 수를 확인한다.
results.getResults().collect { res ->
def doc = res.getDocument();
def key = doc.get("key");
def issue = ComponentAccessor.getIssueManager().getIssueObject(key);
return issue;
}
}
def jqlQuery = "project=JRA AND issuetype=Bug";
def issues = findIssues(jqlQuery);

참고

정리

다소 문제 해결에 애를 먹기는 했지만 해결은 했습니다.
이 글을 쓰고나서 ScriptRunner 쪽에 문서 최신화좀 해달라고 요청해야겠네요.
문서 최신화가 어려운 것은 알지만 다들 삽질할 것 같은데 피드백 얼른 남겨야겠네요.

종종 스크립트러너로 할 수 있는 기능들을 포스팅 해보겠습니다. :)

ScriptRunner 소개 4

ScriptRunner 소개 #4

지난 #3 소개 글에서는 Script Fragments 기능까지 보았습니다.
얼마 남지 않았지만 너무 길어져서 #4로 나눴습니다.

  • Escalation Services
  • Script JQL Functions

길고 길었던 ScriptRunner 소개를 마무리하러 가보겠습니다! :)

Escalation Services

https://scriptrunner.adaptavist.com/latest/jira/escalation-service.html
설명은 아래와 같이 나와있는데 요약해보겠습니다.

Automate issue escalation with escalation services. Use a JQL query to define processes for modifying issues based on elapsed time. Specify actions (such as transitions) to occur at defined intervals after a specified time has passed.

에스컬레이션 서비스를 통해 문제 에스컬레이션 자동화 JQL 쿼리를 사용하여 경과된 시간을 기준으로 문제를 수정하는 프로세스를 정의하십시오. 지정된 시간이 경과한 후 정의된 간격으로 발생할 작업(예: 전환)을 지정하십시오. - with Papago

JQL로 검색한 쿼리들을 일정 시간마다 특정 값을 설정하거나 transition(전환) 할 수 있는 기능입니다.
예를 들면, 2주 동안 변경이 없는 이슈들의 상태를 변경할 수 있겠죠. (혹은 특정 필드를 수정하거나)


입력해야하는 항목은 아래와 같이 많지 않습니다.

  • Description: 설정에 대한 설명을 적습니다.
  • JQL Query: 변경하고자하는 이슈를 가져오기 위해 JQL을 작성합니다.
  • AS User: 어떤 유저로 변경할 것인지 설정합니다.
  • Interval/CRON Expression: 얼마나 자주 실행할 것인지 설정합니다. 기본적으로 분 단위로 설정할 수 있습니다.
    • CRON Expression에 대한 것은 링크에서 참고하여 작성해볼 수 있습니다.
  • Action: Transition을 설정할 수 있습니다. 반드시 설정해야하는 항목은 아닙니다.
  • Additional issue actions: 댓글을 달거나 Resolution을 설정할 수 있습니다. groovy 코드로 작성해야합니다.
    • Show examples를 보고 작성해보는 것을 추천합니다.
  • Transition Options: Permissions, Validators, Conditions 확인하는 것을 건너뛸 것인지 설정합니다.

수시로 확인해서 상태를 업데이트하거나 이슈의 항목을 수정해야하는 일이 있다면 사용하기 좋을 것 같습니다.
다만 As User로 설정한 유저의 권한을 잘 확인하여 transition할 수 있는 권한이 있는지 확인해주세요.
(방금 테스트해보았는데 권한없는 동작을 하려할 경우 아예 변경이 진행되지 않습니다.)

Script JQL Functions

https://scriptrunner.adaptavist.com/latest/jira/jql-functions.html
이 항목은 커스텀한 JQL 함수를 추가할 수 있다기 보다 현재 사용할 수 있는 JQL Function들을 보여줍니다.

커스텀한 함수를 추가할 수는 있지만 JIRA 페이지에서 바로 추가할 수 있지는 않습니다.
https://scriptrunner.adaptavist.com/latest/jira/custom-jql-functions.html


쭉 내려보면 많은 함수들을 볼 수 있습니다.
함수에 대한 더 자세한 내용을 보려면 위에 있는 jql-functions 링크를 참고하세요.

ScriptRunner 소개 마무리

4개의 포스트로 소개 문서를 마무리하고자 합니다.
많은 내용들을 찾아보고 테스트 삼아 만들어보느라 시간이 오래걸리기도 했네요.
설정하면서 많이 배웠고 실제 프로젝트에서도 적용해볼만한 내용들이 많았습니다.
다른 JIRA를 사용하는 분들께도 필요한 내용이 있으면 다른 포스트에서 짧게 사용할만한 것들
남겨두겠습니다. :)

긴 글 읽어주셔서 감사합니다. (_ _)