이 문서는 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 할 수 없음