본문 바로가기
프로그래밍/젠킨스(Jenkins)

Jenkins SubversionSCM.ModuleLocation로 SVN 내려받기

by bantomak 2025. 1. 27.
반응형

우선 Dockerfile로 Groovy 초기화 스크립트 복사하기

Groovy 스크립트를 수정하고 해당 스크립트를 도커 파일로 복사해서 젠킨스 설정 시에 적용되도록 세팅하자. (Groovy 스크립트는 VisualStudio Code를 활용했다.)

FROM jenkins/jenkins:lts

USER root

# Groovy 스크립트 복사
COPY init.groovy.d/ /usr/share/jenkins/ref/init.groovy.d/

USER jenkins

Subversion & Credential 실행 스크립트(Subversion & Credential Setting Scripts)

해당 내용을 GUI가 아닌 스크립트로 설정이 가능하다.

아래는 init.groovy.d를 수정한 내용이다. SubversionSCM.ModuleLocation 객체를 사용하면 SVN주소를 입력해서 해당 저장소에 있는 내용을 내려받을 수 있다. 물론 이를 위해서는 해당 SVN에 접근 가능한 계정명과 계정 비밀번호가 필요하다. 아래의 스크립트를 참고해서 계정명과 계정 비밀번호를 입력하는 방법을 알아보자.

import jenkins.model.*
import hudson.model.*
import hudson.scm.*
import hudson.scm.subversion.*

import com.cloudbees.plugins.credentials.CredentialsScope
import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl
import com.cloudbees.plugins.credentials.domains.Domain
import org.jenkinsci.plugins.credentialsbinding.impl.*

// Subversion Credentials 추가
def svnUsername = ""   // Subversion 사용자 이름
def svnPassword = "" // Subversion 비밀번호
def credentialsId = "" // Jenkins에서 참조할 ID

def svnCredentials = new UsernamePasswordCredentialsImpl(
    CredentialsScope.GLOBAL,     // 범위
    credentialsId,               // ID
    "",                          // 설명
    svnUsername,                 // 사용자 이름
    svnPassword                  // 비밀번호
)

// Credentials 저장
credentialsStore.addCredentials(Domain.global(), svnCredentials)
println("Subversion credentials added with ID '${credentialsId}'.")

// Jenkins 인스턴스 가져오기
def instance = Jenkins.getInstance()

def jobName = "job-name"
def job = instance.getItem(jobName)

if (job == null) {
    println("Creating new Freestyle project: ${jobName}")

    // Freestyle 프로젝트 생성
    job = new FreeStyleProject(instance, jobName)
    instance.add(job, jobName)

    // Subversion 설정
    def depthOption = "infinity"

    // SubversionSCM.ModuleLocation 객체 생성
    def moduleLocation = new SubversionSCM.ModuleLocation("http://svn.co.kr/svn", credentialsId, "./", depthOption, true, true)

    // SubversionSCM 객체 생성
    def svnSCM = new SubversionSCM(
        [moduleLocation], // ModuleLocation 리스트
        null, // workspaceUpdater
        null, // browser
        "",  // excludedRegions
        "",  // excludedUsers
        "",  // excludedRevprop
        "",  // excludedCommitMessages
        "",  // includedRegions
        false, // ignoreDirPropChanges
        false, // filterChangelog
        null,  // additionalCredentials
        true  // quietOperation
    )

    job.setScm(svnSCM)

    // 빌드 환경 설정: Use secret text(s) or file(s) - Username and Password (separated)
    def usernamePasswordBinding = new UsernamePasswordMultiBinding(
        "svn_username", // 사용자 이름이 바인딩될 환경 변수 이름
        "svn_password", // 비밀번호가 바인딩될 환경 변수 이름
        "credential_ID" // Jenkins Credentials ID
    )

    def buildWrapper = new SecretBuildWrapper([usernamePasswordBinding])
    job.getBuildWrappersList().add(buildWrapper)

    job.save()
    println("Freestyle project '${jobName}' created with Subversion checkout configuration.")
} else {
    println("Freestyle project '${jobName}' already exists.")
}
  • UsernamePasswordCredentialsImpl
  • SubversionSCM.ModuleLocation
  • UsernamePasswordMultiBinding

함께 읽으면 좋은 글

 

Groovy 스크립트로 도커 환경 젠킨스(Jenkins) 초기 설정하기

들어가면서(Intro)CI/CD를 위해서 많은 사람들이 젠킨스를 활용한다. 젠킨스는 유저에게 강력한 GUI를 제공하여 편하게 설정을 추가하고 제거하는 것이 강점이다. 하지만 한번 설정한 후에는 거의

jettstream.tistory.com

댓글