[CI/CD] Jenkins + SVN

김민재·2025년 11월 15일

CI/CD

목록 보기
8/8

🍁 Jenkins와 SVN 연동하여 파이프라인SVN 연동하여 파이프라인(maven)

SVN을 사용하는 프로젝트에 Jenkins를 연결하여 자동화 배포를 실행하려고 한다.

🪺 post-commit hook을 통한 파이프라인

  1. SVN Repo 계정 Credentials를 생성한다.

    • Username(repo id) with password(repo pw) 설정 ID는 credential에서 사용할 변수
  2. Jenkins Subversion 플러그인 다운로드

  3. Jenkins job 생성(프리스타일 파이프라인)

  4. job - General - 소스코드관리 - Subversion && Build Steps - Invoke top-level Maven targets 설정(Goals clean install, 고급 POM pom.xml(루트 경로))

  5. Triggers - 빌드를 원격으로 유발(token: test) 나중에 적혀있는 데로 사용해야한다.

  6. Jenkins에서 빌드를 실행하기 위해 API TOKEN 생성

    • Jenkins - 사용자 - Security - API Token 생성
  7. ViseualSVN Server - Repo - 프로젝트 우 클릭 후 Hooks - post commit - edit - 5번 젠킨스 url 작성

    @echo off
    REM 로그 남기기 (실패 원인 확인용)
    echo %DATE% %TIME% Starting Jenkins build >> C:\temp\svn-hook.log
    
    REM Jenkins 빌드 트리거
    "C:\Windows\System32\curl.exe" -u USERNAME:APITOKEN     "http://localhost:8080/job/project/build?token=token" >>    C:\temp\svn-hook.log 2>&1
    
    echo %DATE% %TIME% Finished Jenkins build >> C:\temp\svn-hook.log
    
  8. svn 커밋을 실행하면 Jenkins 빌드가 실행된다.

🦛 Jenkinsfile을 통한 파이프라인

  1. SVN Repo 계정 Credentials를 생성한다.

    • Username(repo id) with password(repo pw) 설정 ID는 credential에서 사용할 변수
  2. Jenkins Subversion 플러그인 다운로드

  3. Jenkins job 생성(단일 파이프라인)

  4. job - Triggers - 빌드를 원격으로 유발 - token 생성

  5. Pipeline - Pipeline script from SCM - 설정

  6. ViseualSVN Server - Repo - 프로젝트 우 클릭 후 Hooks - post commit - edit - 4번 젠킨스 url 작성

    @echo off
    REM 로그 남기기 (실패 원인 확인용)
    echo %DATE% %TIME% Starting Jenkins build >> C:\temp\svn-hook.log
    
    REM Jenkins 빌드 트리거
    "C:\Windows\System32\curl.exe" -u USERNAME:APITOKEN     "http://localhost:8080/job/project/build?token=token" >>    C:\temp\svn-hook.log 2>&1
    
    echo %DATE% %TIME% Finished Jenkins build >> C:\temp\svn-hook.log
    
  7. Jenkinsfile 생성

pipeline {
    agent any

    environment {
        SVN_URL = credentials('svn-url') // Secret Text ID
    }

    stages {
        stage('Checkout from SVN') {
            steps {
                echo 'SVN에서 소스 체크아웃 중...'
                checkout([
                    $class: 'SubversionSCM',
                    locations: [[
                        credentialsId: 'svn-credential', // SVN 사용자 인증용 Credential
                        depthOption: 'infinity',
                        ignoreExternalsOption: true,
                        local: '.',
                        remote: env.SVN_URL // Secret Text로 넣은 URL
                    ]],
                    quietOperation: false,
                    workspaceUpdater: [$class: 'UpdateUpdater']
                ])
            }
        }
        
        stage('Show Changed Files') {
            steps {
                echo '=== 커밋된 파일 목록 ==='
                script {
                    def changeLogSets = currentBuild.changeSets
                    
                    if (changeLogSets.size() == 0) {
                        echo "변경 사항 없음"
                    } else {
                        changeLogSets.each { changeSet ->
                            changeSet.items.each { entry ->
                                echo "\n커밋 메시지: ${entry.msg}"
                                echo "변경된 파일:"
                                entry.affectedPaths.each { path ->
                                    echo "  ${path}"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    post {
        success {
            echo '✅ 빌드 성공!'
        }
    }
}

  1. svn 커밋을 실행하면 Jenkins 빌드가 실행된다.
profile
개발 경험치 쌓는 곳

0개의 댓글