Spring Webflux 애플리케이션에 자체적으로 적합한 빌드 팩 빌더를 찾을 수 없습니다. 예를 들어, Paketo는 사용자 정의를위한 공간이 거의 없으며 기본적으로 일반적인 Webflux 앱 (예 : apache-tomcat)에 필요하지 않은 빌드 팩이 포함되어 있습니다. webflux / jvm-reactive 애플리케이션에 맞는 빌드 팩이 있습니까?
Spring Webflux에 대해 여기서 특정 작업을 수행 할 필요가없는 것처럼 보이며 Java 관련 CNB가 올바른 작업을 수행합니다.
Spring Initializer (Webflux 스타터 추가)로 만든 샘플 앱을 가져 와서 실행 pack build
했습니다 (를 실행 ./mvnw spring-boot:build-image
하면 매우 유사한 출력이 표시됩니다).
그 결과 다음과 같은 결과가 나왔습니다.
===> DETECTING
[detector] 6 of 17 buildpacks participating
[detector] paketo-buildpacks/bellsoft-liberica 3.2.0
[detector] paketo-buildpacks/maven 3.1.0
[detector] paketo-buildpacks/executable-jar 3.1.0
[detector] paketo-buildpacks/apache-tomcat 2.2.0
[detector] paketo-buildpacks/dist-zip 2.2.0
[detector] paketo-buildpacks/spring-boot 3.2.0
언뜻보기에는 이상하게 보일 수 있습니다. 왜 Tomcat이 있습니까? Tomcat CNB를 보면 예상됩니다. Tomcat CNB는 항상 성공적인 감지 를 반환합니다 .
pass
사실로 하드 코딩 된 방법 에 유의하십시오 .
result := libcnb.DetectResult{
Pass: true,
Plans: []libcnb.BuildPlan{
{
Requires: []libcnb.BuildPlanRequire{
{Name: "jre", Metadata: map[string]interface{}{"launch": true}},
{Name: "jvm-application"},
},
},
},
}
이것이 괜찮은 이유는 빌드시 디렉토리 가 없으면WEB-INF
Tomcat CNB가 즉시 종료 (no-op) 되고 Spring WebFlux 앱의 경우에는 존재하지 않기 때문입니다.
file := filepath.Join(context.Application.Path, "WEB-INF")
if _, err := os.Stat(file); err != nil && !os.IsNotExist(err) {
return libcnb.BuildResult{}, fmt.Errorf("unable to stat file %s\n%w", file, err)
} else if os.IsNotExist(err) {
return libcnb.BuildResult{}, nil
}
의 전체 출력을 pack build
보고 존재 여부를 확인하여이를 확인할 수 있습니다 Paketo Apache Tomcat Buildpack x.x.x
(여기서 xxx는 버전 번호). Tomcat CNB가 실행 중이고 작업을 수행하는 경우 해당 라인 output이 표시 됩니다.
paketo-buildpack / dist-zip CNB는 동일한 방식으로 작동하며 단지 <APPLICATION_ROOT>/*/bin/*
존재를 찾고 있습니다.
요약하면 생성되는 이미지는 애플리케이션에 고유해야하며 불필요한 내용을 포함해서는 안됩니다. Spring WebFlux를 실행중인 경우 이미지에 Tomcat이 설치되어 있지 않아야합니다. 또한 Cloud Native 빌드 팩을 사용하여 제공되는 모든 최적화를 얻을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다