페이지 트리

이 문서는 Bitbucket ScriptRunner를 사용하여 브랜치 생성 시 날짜 Commit 가이드를 공유하기 위해 작성되었다.


도구명Bitbucket, ScriptRunner for Bitbucket
비고




ScriptRunner를 사용하여 브랜치 생성 시 날짜 Commit

 Custom Listener 만들기

  • Script Runner → Listeners → Create Listener 선택


  • Custom Listener 선택


  • BranchCreatedEvent 이벤트 선택


  • 해당 스크립트 사용
    • 스크립트 내용
    • 32줄: 내용을 기록할 파일명 입력
    • 40줄: 원하는 날짜포맷 입력
    • 44줄: 파일에 기록될 내용 입력
    • 47줄: Commit Message 입력
    • 54줄: 적용되는 브랜치 패턴 입력 
import com.atlassian.sal.api.net.ResponseException
import com.atlassian.plugin.PluginAccessor
import com.onresolve.scriptrunner.canned.bitbucket.util.BitbucketBaseScript
import com.onresolve.scriptrunner.runner.ScriptRunnerImpl
import groovy.transform.BaseScript

import java.util.regex.Pattern
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.bitbucket.event.branch.BranchCreatedEvent
import com.atlassian.bitbucket.event.ApplicationEvent

import com.atlassian.bitbucket.content.EditFileRequest
import java.nio.file.FileSystems
import java.nio.file.PathMatcher
import com.atlassian.bitbucket.content.ContentService
import com.atlassian.bitbucket.io.TypeAwareOutputSupplier
import com.atlassian.bitbucket.util.MoreSuppliers
import com.atlassian.bitbucket.io.InputSupplier
import java.io.ByteArrayOutputStream
import java.io.ByteArrayInputStream
import com.atlassian.bitbucket.avatar.SimpleAvatarSupplier
import java.text.SimpleDateFormat
@BaseScript BitbucketBaseScript baseScript
// 이벤트
def event = event as BranchCreatedEvent
def log = Logger.getLogger("com.curvc")
def repository = event.getRepository()
// 내용을 기록할 파일 해당 파일이 없을 시 에러남
def filePath = 'readme.txt'

log.setLevel(Level.DEBUG)
//날짜
log.warn("Date: " + event.getDate())
def branch = event.getBranch()
String branchId = branch.getDisplayId()
//원하는 날짜 포맷 지정
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 MM분");
String strNowDate = simpleDateFormat.format(event.getDate()) 

// 파일에 추가할 내용
String addStr = "\nCreate Branch Name: " + branchId + " Date: " + strNowDate

// Commit Message
String commitMessage = addStr

//브랜치명
log.warn("BranchName: " + branchId)

//적용시킬 브랜치명 리스트

def branchNamepattern = [~/release\/.*/, ~/product\/.*/, ~/develop\/.*/]
boolean branchNameCheck = false
branchNamepattern.each{ def pattern ->
    if( branchId ==~ pattern){
        log.warn(branchId)
        branchNameCheck = true
    }
}
// 해당 브랜치명 포함 안할 시 return
if(!branchNameCheck){
    log.warn("return")
    return
}


// 해당 파일 열고 파일 commmit
def contentService = ComponentLocator.getComponent(ContentService)
def lastCommit = branch.getLatestCommit().toString()

ByteArrayOutputStream outputStream = new ByteArrayOutputStream()
TypeAwareOutputSupplier os = MoreSuppliers.newTypeAwareOutputSupplierOf(outputStream)
contentService.streamFile(repository, lastCommit, filePath, os);
def newline = addStr.bytes
outputStream.write(newline)
outputStream.flush()
log.warn(outputStream.toString())

byte[] bytes = outputStream.toByteArray()
InputStream inputStream = new ByteArrayInputStream(bytes)
InputSupplier lastContent = new SimpleAvatarSupplier(inputStream)

def editFileCommand = contentService.editFile(
    new EditFileRequest.Builder(branchId, filePath, repository)
        .content(lastContent)
        .message(commitMessage)
        .sourceCommitId(lastCommit)
        .build()
)
outputStream.close()
inputStream.close()   


script에 설정한 FilePath에 해당 파일이 없을 시 Commit 할 수 없음








참조링크

  • 레이블 없음