<aside> <img src="/icons/tag_gray.svg" alt="/icons/tag_gray.svg" width="40px" />
목차
</aside>
<aside> 📌
아래와 같이 스크립트 내에 polling 설정을 하는 경우, 따로 GUI에서는 적용하지 않아도 됩니다.
한번 빌드 후 초기화가 된다면 자동으로 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
Jenkins는 Item(job)마다 고유한 작업 디렉토리를 생성하여 git 저장소를 clone합니다.
Jenkins가 clone하는 위치 =
workspace
env.WORKPSPACE입니다.// 파라미터 정의
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']
]
])
}
}