페이지 트리

이 문서는 Bitbucket ScriptRunner를 사용하여 연결된 Jira Issue Priority에 따라 Approveral 수 조절하기 가이드를 공유하기 위해 작성되었다.


도구명Bitbucket, ScriptRunner for Bitbucket
비고




ScriptRunner를 사용하여 연결된 Jira Issue Priority에 따라 Approveral 수 조절하기

Merge Check 만들기

  • Script Runner → Merge Checks → Create Merge Check 선택


  • Require a minimum number of approvers 선택


  • 적용하고자 하는 범위 선택


  • 해당 스크립트 사용
    • 스크립트 내용
    • 35 ~ 37 줄: 적용하고자 하는 타켓브랜치 선택
    • 46줄: 적용하고자 하는 Priority 이름 입력
    • 47줄: Jira http access token 값 입력
    • 76줄: 기본 리뷰어 추가시 해당 부분 입력(username)
       
import com.atlassian.sal.api.net.ResponseException
import com.atlassian.applinks.api.ApplicationLinkResponseHandler
import com.atlassian.plugin.PluginAccessor
import com.atlassian.bitbucket.integration.jira.JiraIssueService
import com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketBaseScript
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.ScriptRunnerImpl
import com.atlassian.applinks.api.ApplicationLinkRequest
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
import groovy.transform.BaseScript

import org.apache.log4j.Level
import org.apache.log4j.Logger
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.GET
import static groovyx.net.http.ContentType.JSON
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.bitbucket.user.UserService
import com.atlassian.bitbucket.pull.PullRequestService
import com.atlassian.bitbucket.pull.PullRequestParticipant
import com.atlassian.sal.api.component.ComponentLocator

@BaseScript BitbucketBaseScript baseScript
@PluginModule
JiraIssueService jiraIssueService

def log = Logger.getLogger("com.curvc.test")
log.setLevel(Level.DEBUG)
def pullRequestService = ComponentLocator.getComponent(PullRequestService)
def pullRequest = mergeRequest.pullRequest
log.warn(pullRequest.id)

// 설정할 브랜치(해당 부분으로 master 브랜치만 적용됨)
if(pullRequest.toRef.displayId.toString() != 'master'){
    return false
}

def keys = jiraIssueService.getIssuesForPullRequest(repository.id, pullRequest.id)*.key 
 
def jiraLink = getJiraAppLink()
log.warn(jiraLink.getDisplayUrl())
def url = jiraLink.getDisplayUrl().toString()

//Priority 이름 
String lookingpriority = 'Highest'
String token = 'jira token 값'

boolean merge_check = false
def http = new HTTPBuilder(url)
//할당된 이슈마다 조회
keys.each{
    String key ->
    log.warn(key)
    String priorityName = ''
	http.request(GET, JSON ) {
      uri.path = '/rest/api/latest/issue/'+ key 
      uri.query = [fields:'priority']
      headers.'Authorization' = 'Bearer ' + token
      headers.'Content-Type' = "application/json"
      headers.Accept = 'application/json'
      response.success = { resp, json ->
        priorityName = json.fields.priority.name.toString()
        log.warn(priorityName)
      }
      response.failure = { resp, json ->
        log.warn(json)
      	log.warn('Error')
      }
    }
    //이슈 하나라도 priority 이름이 동일 할시 해당 스크립트 적용
    if(priorityName == lookingpriority){
        log.warn("priority is " + priorityName)
        log.warn("approvers change")
        // 리뷰어 넣기
        pullRequestService.addReviewer(repository.id, pullRequest.id, 'jk.park')
        merge_check = true
    }
}
return merge_check


  • 승인자 수 입력 후 Update



Jira Access Token 얻기

  • Jira 로그인 → 프로파일 선택


  • Personal Access Token → Create Token 선택

  • Expiry 체크 해제 후 Create





참조

  • 레이블 없음