<aside> ✏️

13. Credentials Scope 설정 에 따른 Credentials ID 값 수정

</aside>

stage('Build Unity Android') {
    when { expression { return !params.SKIP_BUILD } }
    options { timeout(time: 1, unit: 'HOURS') }
    steps {
        withCredentials([
            string(credentialsId: 'SE_KEYSTORE_PASSWORD', variable: 'KEYSTORE_PASS'),
            string(credentialsId: 'SE_KEY_ALIAS', variable: 'KEY_ALIAS'),
            string(credentialsId: 'SE_KEY_ALIAS_PASSWORD', variable: 'KEY_ALIAS_PASS')
        ]) {
            script {
                def localBuildPath = "${params.BUILD_ROOT}/${env.DEFAULT_BUILD_PATH}"
                def outputDir = "${localBuildPath}/Builds/android"
                def logDir = "${localBuildPath}/Logs"
                def ext = (params.UNITY_BUILD_AAB) ? 'aab' : 'apk'
                def filePath = "${outputDir}/${env.BUILD_NAME}.${ext}"
                def logPath = "${env.LOG_DIR}/${env.BUILD_NAME}.log"

                def projectPath = "${env.WORKSPACE}/${env.BUILD_REPO_NAME}/${env.BUILD_PROJECT_NAME}"
                def keystorePath = "${projectPath}.keystore"

                // 환경변수 설정
                env.BUILD_OUTPUT_PATH = filePath
                env.BUILD_LOG_PATH = logPath

                try {
                    withEnv([
                        "UNITY_BUILD_PATH=${filePath}",
                        "UNITY_BUILD_AAB=${params.UNITY_BUILD_AAB}",
                        "KEYSTORE_PATH=${keystorePath}",
                        "KEYSTORE_PASS=${KEYSTORE_PASS}",   // 주의: env.XXX 사용 안함
                        "KEY_ALIAS=${KEY_ALIAS}",
                        "KEY_ALIAS_PASS=${KEY_ALIAS_PASS}"
                    ]) {
                        sh """
                            mkdir -p "${logDir}"

                            "${env.UNITY_PATH}" \
                              -batchmode \
                              -nographics \
                              -projectPath "${projectPath}" \
                              -executeMethod AndroidBuilder.BuildAndroid \
                              -quit \
                              -logFile "${logPath}" \
                              -buildTarget android
                        """
                    }

                    if (!fileExists(filePath)) {
                        error "[ERROR] Unity Build Output File not found: ${filePath}"
                    }

                } catch (err) {
                    currentBuild.description = "BUILD_FAILED"
                    env.BUILD_FAIL_LOG_URL = uploadToS3(logPath, "${env.DEFAULT_BUILD_PATH}/logs")
                    error "[BUILD ERROR] Unity 빌드 실패: ${err.message}"
                }
            }
        }
    }
}