<aside> <img src="/icons/tag_gray.svg" alt="/icons/tag_gray.svg" width="40px" />

목차

</aside>

1. Jenkins 파이프 라인에 폴링 적용

<aside> 📌

아래와 같이 스크립트 내에 polling 설정을 하는 경우, 따로 GUI에서는 적용하지 않아도 됩니다.

</aside>

 . . .

// 폴링 설정
triggers {
		pollSCM('H/5 * * * 5')  // "매주 금요일 5분마다 SCM 변경 체크"
}

// 빌드 단계 (Stages)
stages {
    // 1단계: Clean Workspace
    stage('Clean Workspace') {
        steps {
            cleanWs()
        }
    }

    // 2단계: Git Checkout (서브모듈 포함)
    stage('Checkout with Submodules') {
        steps {
            checkout([
                $class: 'GitSCM',
                branches: [[name: "*/${params.BRANCH}"]],
                userRemoteConfigs: [[
                    url: "${params.PRJ_URL}",
                    credentialsId: 'SerpentOfTheEnd_Jenkins_Polling_TOKEN'
                ]],
                extensions: [
                    [$class: 'SubmoduleOption', recursiveSubmodules: true, trackingSubmodules: true],
                    [$class: 'RelativeTargetDirectory', relativeTargetDir: 'SerpentOfTheEnd-client']
                ]
            ])
        }
    }

  . . .

<aside> ✏️

트리거 판단

<aside> ⚠️

**pollSCM**은 **Jenkinsfile**이 있는 브랜치를 기준으로 동작하지만, 해당 브랜치를 한 번도 빌드하지 않아 workspace가 초기화되지 않았을 경우 Jenkins는 workspace 디렉토리를 생성하지 않습니다. 즉, 최초 빌드는 수동 트리거 필요합니다.

<aside> ✏️

env.WORKPSPACE

JenkinsItem(job)마다 고유한 작업 디렉토리를 생성하여 git 저장소를 clone합니다.

Jenkins가 clone하는 위치 = workspace

2. git plugin submodule 옵션 설명

// 파라미터 정의
parameters {
    string(name: 'PRJ_URL', defaultValue: '<https://github.com/Geekble-Game/SerpentOfTheEnd-client.git>', description: 'GitHub repository URL')  // Git URL
    string(name: 'BRANCH', defaultValue: 'develop', description: 'Branch to build')  // 브랜치명
    string(name: 'UNITY_VER', defaultValue: '6000.0.26f1', description: 'Unity Editor version')  // 유니티 버전
    string(name: 'BUILD_ROOT', defaultValue: '/Users/msg/Desktop/build', description: 'Build output root directory')  // 빌드 결과 저장 경로
    booleanParam(name: 'UNITY_BUILD_AAB', defaultValue: true, description: 'Build Android App Bundle (AAB)')  // AAB 여부
}

  . . .

// 2단계: Git Checkout (서브모듈 포함)
stage('Checkout with Submodules') {
    steps {
        checkout([
            $class: 'GitSCM',
            branches: [[name: "*/${params.BRANCH}"]],
            userRemoteConfigs: [[
                url: "${params.PRJ_URL}",
                credentialsId: 'SerpentOfTheEnd_Jenkins_Polling_TOKEN'
            ]],
            extensions: [
                [$class: 'SubmoduleOption', recursiveSubmodules: true, trackingSubmodules: true],
                [$class: 'RelativeTargetDirectory', relativeTargetDir: 'SerpentOfTheEnd-client']
            ]
        ])
    }
}

설명: Checkout 블럭