11.11. S2I
이미지에는 S2I 스크립트와 Maven이 포함됩니다. Maven은 현재 OpenShift의 JBoss EAP 기반 컨테이너(또는 관련/하위 이미지)에 배포되어야 하는 애플리케이션의 빌드 도구로만 지원됩니다.
현재 WAR 배포만 지원됩니다.
11.11.1. 사용자 정의 설정 링크 복사링크가 클립보드에 복사되었습니다!
이미지에 대한 사용자 지정 구성 파일을 추가할 수 있습니다. configuration/ 디렉토리에 배치된 모든 파일이 EAP_HOME/standalone/configuration/ 에 복사됩니다. 예를 들어 이미지에 사용되는 기본 구성을 재정의하려면 사용자 지정 standalone.xml 을 configuration/ 디렉터리에 추가하기만 하면 됩니다. 이러한 배포 예제는 예제를 참조하십시오.
11.11.1.1. 사용자 정의 모듈 링크 복사링크가 클립보드에 복사되었습니다!
사용자 지정 모듈을 추가할 수 있습니다. modules/ 디렉터리의 모든 파일이 EAP_HOME/modules/ 에 복사됩니다. 이러한 배포 예제는 예제를 참조하십시오.
11.11.2. 배포 Artifacts 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 소스 대상 디렉터리의 아티팩트가 배포됩니다. 다른 디렉터리에서 배포하려면 BuildConfig 정의에 ARTIFACT_DIR 환경 변수를 설정합니다. ARTIFACT_DIR 은 쉼표로 구분된 목록입니다. 예: ARTIFACT_DIR=app1/target,app2/target,app3/target
11.11.3. 아티팩트 저장소 미러 링크 복사링크가 클립보드에 복사되었습니다!
Maven의 리포지토리에는 다양한 유형의 빌드 아티팩트 및 종속성(예: 모든 프로젝트 JAR, 라이브러리 JAR, 플러그인 또는 기타 프로젝트별 아티팩트)이 있습니다. S2I 빌드를 수행하는 동안 아티팩트를 다운로드할 위치도 지정합니다. 중앙 리포지토리를 사용하는 것 외에도 조직에서 로컬 사용자 정의 미러 저장소를 배포하는 것이 일반적인 방법입니다.
미러를 사용하면 다음과 같은 이점이 있습니다.
- 동기화된 미러의 가용성은 지리적으로 더 빠르고 빠릅니다.
- 리포지토리 콘텐츠를 보다 효과적으로 제어할 수 있는 기능.
- 공용 서버 및 리포지토리에 의존할 필요 없이 다양한 팀(개발자, CI)에서 아티팩트를 공유할 수 있습니다.
- 빌드 시간이 개선되었습니다.
종종 저장소 관리자는 미러에 대한 로컬 캐시 역할을 할 수 있습니다. 리포지토리 관리자가 이미 배포되어 https://10.0.0.1:8443/repository/internal/ 에서 외부에서 연결할 수 있다고 가정하면 S2I 빌드는 다음과 같이 애플리케이션의 빌드 구성에 MAVEN_MIRROR_URL 환경 변수를 제공하여 이 관리자를 사용할 수 있습니다.
MAVEN_MIRROR_URL변수를 적용할 빌드 구성의 이름을 식별합니다.oc get bc -o name buildconfig/eapMAVEN_MIRROR_URL환경 변수를 사용하여 build 구성을 업데이트합니다.oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/" buildconfig "eap" updated설정을 확인합니다.
oc env bc/eap --list # buildconfigs eap MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/- 애플리케이션의 새 빌드를 예약합니다.
애플리케이션 빌드 중에 Maven 종속성은 기본 공용 리포지토리가 아니라 리포지토리 관리자에서 가져옵니다. 또한 빌드가 완료되면 빌드 중에 검색 및 사용된 모든 종속 항목으로 미러가 채워집니다.
11.11.3.1. 보안 아티팩트 저장소 미러 URL 링크 복사링크가 클립보드에 복사되었습니다!
Maven 리포지토리를 통해 "man-in-the-middle" 공격을 방지하려면 JBoss EAP에서 아티팩트 리포지토리 미러 URL에 대한 보안 URL을 사용해야 합니다.
URL은 보안 http("https") 및 보안 포트를 지정해야 합니다.
기본적으로 비보안 URL을 지정하면 오류가 반환됩니다. -Dinsecure.repositories=WARN 속성을 사용하여 이 동작을 재정의할 수 있습니다.
11.11.4. 스크립트 링크 복사링크가 클립보드에 복사되었습니다!
run-
이 스크립트는
standalone.xml구성으로 JBoss EAP를 구성하고 시작하는openshift-launch.sh스크립트를 사용합니다. assemble-
이 스크립트는 Maven을 사용하여 소스를 빌드하고 패키지(WAR)를 생성한 다음
EAP_HOME/standalone/deployments디렉터리로 이동합니다.
11.11.5. 사용자 지정 스크립트 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP가 시작되기 전에 포드를 시작할 때 실행할 사용자 지정 스크립트를 추가할 수 있습니다.
CLI 스크립트를 포함하여 Pod를 시작할 때 실행할 유효한 스크립트를 추가할 수 있습니다.
이미지에서 JBoss EAP를 시작할 때 스크립트를 포함하여 두 가지 옵션을 사용할 수 있습니다.
- postconfigure.sh로 실행할 configmap을 마운트합니다.
- nominated 설치 디렉터리에 install.sh 스크립트를 추가합니다.
11.11.5.1. 사용자 정의 스크립트를 실행하기 위한 configmap 마운트 링크 복사링크가 클립보드에 복사되었습니다!
런타임 시 사용자 지정 스크립트를 기존 이미지(즉, 이미 빌드된 이미지)에 마운트하려는 경우 configmap을 마운트합니다.
configmap을 마운트하려면 다음을 수행합니다.
postconfigure.sh에 포함할 콘텐츠로 configmap을 생성합니다.
예를 들어 프로젝트 루트 디렉터리에
확장이라는 디렉터리를 생성하여postconfigure.sh및extensions.cli스크립트를 포함하고 다음 명령을 실행합니다.$ oc create configmap jboss-cli --from-file=postconfigure.sh=extensions/postconfigure.sh --from-file=extensions.cli=extensions/extensions.cli배포 컨트롤러(dc)를 통해 configmap을 Pod에 마운트합니다.
$ oc set volume dc/eap-app --add --name=jboss-cli -m /opt/server/extensions -t configmap --configmap-name=jboss-cli --default-mode='0755' --overwrite
postconfigure.sh예
#!/usr/bin/env bash
set -x
echo "Executing postconfigure.sh"
$JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/extensions.cli
extensions.cli의 예
embed-server --std-out=echo --server-config=standalone.xml
:whoami
quit
11.11.5.2. install.sh를 사용하여 사용자 지정 스크립트 실행 링크 복사링크가 클립보드에 복사되었습니다!
빌드 시 스크립트를 이미지의 일부로 포함하려면 install.sh를 사용합니다.
install.sh를 사용하여 사용자 정의 스크립트를 실행하려면 다음을 수행합니다.
-
s2i 빌드 중에 사용할 프로젝트의 git 리포지토리에서
.s2i라는 디렉터리를 생성합니다. s2i디렉터리 내에서 다음 콘텐츠를 사용하여 environment라는 파일을 추가합니다.$ cat .s2i/environment CUSTOM_INSTALL_DIRECTORIES=extensions-
extensions이라는 디렉터리를 만듭니다. extensions디렉토리에서 다음과 유사한 콘텐츠를 사용하여 postconfigure.sh 파일을 만듭니다(사용자 환경에 적합한 코드로 자리 표시자 코드를 교체).$ cat extensions/postconfigure.sh #!/usr/bin/env bash echo "Executing patch.cli" $JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/some-cli-example.cliextensions 디렉토리에서 다음과 유사한 내용으로 파일 install.sh를 만듭니다 ( 자리 표시자 코드를 환경에 적합한 코드로 교체).
$ cat extensions/install.sh #!/usr/bin/env bash set -x echo "Running $PWD/install.sh" injected_dir=$1 # copy any needed files into the target build. cp -rf ${injected_dir} $JBOSS_HOME/extensions
11.11.6. 환경 변수 링크 복사링크가 클립보드에 복사되었습니다!
환경 변수를 s2i build 명령에 제공하여 빌드 실행 방식에 영향을 미칠 수 있습니다. 제공할 수 있는 환경 변수는 다음과 같습니다.
| 변수 이름 | 설명 |
|---|---|
| ARTIFACT_DIR |
이 디렉터리의
예제 값: |
| ENABLE_GENERATE_DEFAULT_DATASOURCE |
선택 사항: 값이 |
| GALLEON_PROVISION_LAYERS | 선택 사항: 지정된 계층을 프로비저닝하도록 S2I 프로세스에 지시합니다. 값은 하나의 기본 계층과 임의의 수의 데코레이터 계층을 포함하여 프로비저닝할 쉼표로 구분된 계층 목록입니다.
예제 값: |
| GALLEON_PROVISION_CHANNELS |
이는 쉼표로 구분된 JBoss EAP 채널 매니페스트 목록입니다. JBoss EAP 채널 매니페스트는 참고
버전은 선택 사항이므로 최신 채널 매니페스트가 검색됩니다. JBoss EAP 8.0의 경우 이 채널 |
| GALLEON_PROVISION_FEATURE_PACKS |
환경 변수를 빌드하여 S2I 이미지의 사용자 지정 Galleon 기능 팩을 지정합니다. 예: 참고
|
| HTTP_PROXY_HOST | Maven을 사용할 HTTP 프록시의 호스트 이름 또는 IP 주소입니다.
예제 값: |
| HTTP_PROXY_PORT | Maven에서 사용할 HTTP 프록시의 TCP 포트입니다.
값 예: |
| HTTP_PROXY_USERNAME |
예제 값: |
| HTTP_PROXY_PASSWORD |
예제 값: |
| HTTP_PROXY_NONPROXYHOSTS | 제공된 경우 구성된 HTTP 프록시는 이러한 호스트를 무시합니다.
예제 값: |
| MAVEN_ARGS | 빌드 중에 Maven에 제공된 인수를 재정의합니다.
예: |
| MAVEN_ARGS_APPEND | 빌드 중에 Maven에 제공된 사용자 인수를 추가합니다.
예제 값: |
| MAVEN_MIRROR_URL | 구성할 Maven 미러/repository 관리자의 URL입니다.
예제 값: 지정된 URL은 안전해야 합니다. 자세한 내용은 Secure artifact repository 미러 URL을 참조하십시오. |
| MAVEN_CLEAR_REPO | 선택적으로 빌드 후 로컬 Maven 리포지토리를 지웁니다. 이미지에 있는 서버가 로컬 캐시에 강하게 연결된 경우 캐시가 삭제되지 않고 경고가 출력됩니다.
예제 value: |
| APP_DATADIR | 정의된 경우 데이터 파일이 복사되는 소스의 디렉터리입니다.
예제 값: |
| DATA_DIR |
예시 값: |
자세한 내용은 Maven 및 S2I 스크립트를 사용하는 OpenShift Container Platform에서 JBoss EAP 애플리케이션 빌드 및 실행을 참조하십시오.