이 문서는 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