diff --git a/Jenkinsfile b/Jenkinsfile index e8878a5..464b7b3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -38,7 +38,7 @@ pipeline { stage('Build JAR') { steps { - sh 'gradle clean build --no-daemon' + sh 'gradle clean build sourceBundle --no-daemon' } } @@ -69,18 +69,20 @@ pipeline { rm -rf build/dist mkdir -p build/dist cp build/libs/damo-manager.jar build/dist/ + cp build/distributions/damo-manager-src-*.zip build/dist/ cp README.md build/dist/ cd build/dist - sha1sum damo-manager.jar README.md > SHA1SUMS - sha256sum damo-manager.jar README.md > SHA256SUMS + for f in damo-manager.jar damo-manager-src-*.zip README.md; do + sha256sum "$f" > "$f.sha256" + done ls -la - echo "---- SHA256SUMS ----" - cat SHA256SUMS + echo "---- *.sha256 ----" + cat *.sha256 ''' } post { success { - archiveArtifacts artifacts: 'build/dist/damo-manager.jar,build/dist/README.md,build/dist/SHA1SUMS,build/dist/SHA256SUMS', fingerprint: true + archiveArtifacts artifacts: 'build/dist/damo-manager.jar,build/dist/damo-manager-src-*.zip,build/dist/README.md,build/dist/*.sha256', fingerprint: true } } } diff --git a/README.md b/README.md index e774f8c..5d855dc 100644 --- a/README.md +++ b/README.md @@ -39,14 +39,35 @@ gradle runBypassSmoke # bypass 모드 (기본값, 옵션 없음) gradle runFakeSmoke # fake 모드 (-Ddamo-manager.enabled=true, scpdb 부재) ``` +### 내부망 반입용 소스 번들 (sourceBundle) + +빌드된 jar 를 이메일에 첨부하면 수신 측 메일 서버에서 차단되는 경우가 많다. 대신 소스 + 빌드 스크립트를 zip 으로 패키징해 반입하고, 내부망에서 빌드한다. + +```bash +gradle sourceBundle +ls build/distributions/ # damo-manager-src-1.0.0.zip +``` + +zip 에는 소스 전체와 **JDK 만으로 동작하는** 빌드 스크립트(`build-internal.sh` / `build-internal.bat`)가 들어 있다. 내부망에 Gradle·인터넷이 없어도 된다. + +```bash +# 내부망에서 (JDK 8+ 필요) +unzip damo-manager-src-1.0.0.zip +cd damo-manager-src-1.0.0 +sh build-internal.sh # Windows 는 build-internal.bat +java -jar build-internal/damo-manager.jar sha256 test # 검증 +``` + +JDK 9 이상이면 스크립트가 자동으로 `--release 8` 을 적용한다. 상세는 번들 내 `BUILD-INTERNAL.md` 참고. zip 첨부도 차단되는 메일 서버라면 확장자를 `.zip.txt` 로 바꿔 발송 후 내부에서 원복한다. + ### Jenkins 빌드 저장소 루트에 `Jenkinsfile` 이 있다. `djb-vm` 에이전트에서 `pollSCM` 으로 트리거되며 다음을 수행한다. -1. **Build JAR** — `gradle clean build --no-daemon` +1. **Build JAR** — `gradle clean build sourceBundle --no-daemon` 2. **Smoke test** — fake / bypass 모드 main + CLI `info` 실행 -3. **Package & checksum** — `build/dist/` 에 `damo-manager.jar` + `README.md` 복사 후 `SHA1SUMS` / `SHA256SUMS` 생성 -4. **archiveArtifacts** — `damo-manager.jar`, `README.md`, `SHA1SUMS`, `SHA256SUMS` 보관 (fingerprint) +3. **Package & checksum** — `build/dist/` 에 `damo-manager.jar` + `damo-manager-src-*.zip` + `README.md` 복사 후 파일별 `*.sha256` 생성 +4. **archiveArtifacts** — `damo-manager.jar`, `damo-manager-src-*.zip`, `README.md`, `*.sha256` 보관 (fingerprint) 빌드 환경(JDK8/Gradle 경로)은 다른 djb-eapim Jenkinsfile 과 동일한 `/apps/opts/*` 경로를 사용한다. diff --git a/build.gradle b/build.gradle index 50e9e6f..761e034 100644 --- a/build.gradle +++ b/build.gradle @@ -59,3 +59,37 @@ tasks.register('runBypassSmoke', JavaExec) { mainClass = 'com.eactive.ext.djb.DamoManager' dependsOn 'classes' } + +// 내부망 반입용 소스 번들. 실행: gradle sourceBundle +// jar 첨부가 메일 서버에서 차단되므로 소스 + JDK 전용 빌드 스크립트를 zip 으로 패키징한다. +// 내부망에서는 JDK 만으로 빌드 가능 (scripts/BUILD-INTERNAL.md 참고). +def bundleVersionFile = layout.buildDirectory.file('tmp/sourceBundle/VERSION') + +tasks.register('writeBundleVersion') { + def v = project.version.toString() + outputs.file bundleVersionFile + doLast { + bundleVersionFile.get().asFile.text = v + '\n' + } +} + +tasks.register('sourceBundle', Zip) { + group = 'distribution' + description = 'Package sources + JDK-only build scripts into a zip for air-gapped internal build' + dependsOn 'writeBundleVersion' + archiveBaseName = 'damo-manager-src' + archiveVersion = project.version + destinationDirectory = layout.buildDirectory.dir('distributions') + into "damo-manager-src-${project.version}" + from(projectDir) { + include 'src/**', 'build.gradle', 'settings.gradle', 'README.md' + } + from bundleVersionFile + from('scripts') { + include 'BUILD-INTERNAL.md', 'build-internal.bat' + } + from('scripts') { + include 'build-internal.sh' + filePermissions { unix('0755') } + } +}