5.2. S2I(Source-to-Image) 빌드
S2I(Source-to-Image)는 재현 가능한 컨테이너 이미지를 빌드하는 툴입니다. 컨테이너 이미지에 애플리케이션 소스를 삽입하고 새 이미지를 어셈블하여 실행할 수 있는 이미지를 생성합니다. 새 이미지는 기본 이미지, 빌더, 빌드 소스를 통합하고 buildah run
명령과 함께 사용할 수 있습니다. S2I는 이전에 다운로드한 종속 항목, 이전에 빌드한 아티팩트 등을 다시 사용하는 증분 빌드를 지원합니다.
5.2.1. S2I(Source-to-Image) 증분 빌드 수행
S2I(Source-to-Image)는 증분 빌드를 수행할 수 있으므로 이전에 빌드한 이미지의 아티팩트를 재사용할 수 있습니다.
프로세스
증분 빌드를 생성하려면 전략 정의를 다음과 같이 수정합니다.
strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "incremental-image:latest" 1 incremental: true 2
추가 리소스
- 증분 빌드를 지원하는 빌더 이미지를 생성하는 방법에 대한 내용은 S2I 요구 사항을 참조하십시오.
5.2.2. S2I(Source-to-Image) 빌더 이미지 스크립트 덮어쓰기
빌더 이미지에서 제공하는 assemble
, run
, save-artifacts
S2I(Source-to-Image) 스크립트를 덮어쓸 수 있습니다.
프로세스
빌더 이미지에서 제공하는 assemble
, run
, save-artifacts
S2I 스크립트를 덮어쓰려면 다음 중 하나를 수행합니다.
-
애플리케이션 소스 리포지토리의
.s2i/bin
디렉터리에assemble
,run
, 또는save-artifacts
스크립트를 제공합니다. 스크립트가 포함된 디렉터리의 URL을 전략 정의의 일부로 제공합니다. 예를 들면 다음과 같습니다.
strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "builder-image:latest" scripts: "http://somehost.com/scripts_directory" 1
- 1
- 이 경로에는
run
,assemble
,save-artifacts
가 추가됩니다. 일부 또는 모든 스크립트가 확인되면 해당 스크립트가 이미지에 제공된 동일한 이름의 스크립트 대신 사용됩니다.
scripts
URL에 있는 파일은 소스 리포지토리의 .s2i/bin
에 있는 파일보다 우선합니다.
5.2.3. S2I(Source-to-Image) 환경 변수
소스 빌드 프로세스 및 결과 이미지에서 환경 변수를 사용할 수 있도록 하는 방법에는 환경 파일과 BuildConfig 환경 값을 사용하는 것입니다. 제공되는 변수는 빌드 프로세스 중 출력 이미지에 제공됩니다.
5.2.3.1. S2I(Source-to-Image) 환경 파일 사용
소스 빌드를 사용하면 소스 리포지토리의 .s2i/environment
파일에 지정하는 방식으로 애플리케이션 내에서 행당 하나씩 환경 값을 설정할 수 있습니다. 이 파일에 지정된 환경 변수는 빌드 프로세스 중 출력 이미지에 제공됩니다.
소스 리포지토리에 .s2i/environment
파일을 제공하는 경우 빌드 중 S2I(Source-to-Image)에서 이 파일을 읽습니다. 그러면 assemble
스크립트에서 이러한 변수를 사용할 수 있으므로 빌드 동작을 사용자 정의할 수 있습니다.
프로세스
예를 들어 빌드 중 Rails 애플리케이션의 자산 컴파일을 비활성화하려면 다음을 수행합니다.
-
.s2i/environment
파일에DISABLE_ASSET_COMPILATION=true
를 추가합니다.
빌드 외에 지정된 환경 변수도 실행 중인 애플리케이션 자체에서 사용할 수 있습니다. 예를 들어 Rails 애플리케이션이 production
대신 development
모드에서 시작되도록 하려면 다음을 수행합니다.
-
RAILS_ENV=development
를.s2i/environment
파일에 추가합니다.
지원되는 환경 변수의 전체 목록은 각 이미지의 이미지 사용 섹션에서 확인할 수 있습니다.
5.2.3.2. S2I(Source-to-Image) 빌드 구성 환경 사용
빌드 구성의 sourceStrategy
정의에 환경 변수를 추가할 수 있습니다. 여기에 정의된 환경 변수는 assemble
스크립트를 실행하는 동안 표시되고 출력 이미지에 정의되어 run
스크립트 및 애플리케이션 코드에서도 사용할 수 있습니다.
프로세스
예를 들어 Rails 애플리케이션의 자산 컴파일을 비활성화하려면 다음을 수행합니다.
sourceStrategy: ... env: - name: "DISABLE_ASSET_COMPILATION" value: "true"
추가 리소스
- 빌드 환경 섹션에서는 고급 지침을 제공합니다.
-
oc set env
명령을 사용하면 빌드 구성에 정의된 환경 변수도 관리할 수 있습니다.
5.2.4. S2I(Source-to-Image) 소스 파일 무시
S2I(Source-to-Image)는 무시해야 하는 파일 패턴 목록이 포함된 .s2iignore
파일을 지원합니다. .s2iignore
파일에 있는 패턴과 일치하고 다양한 입력 소스에서 제공하는 빌드 작업 디렉터리의 파일은 assemble
스크립트에서 사용할 수 없습니다.
5.2.5. S2I(Source-to-Image)를 사용하여 소스 코드에서 이미지 생성
S2I(Source-to-Image)는 애플리케이션 소스 코드를 입력으로 사용하고 어셈블된 애플리케이션을 실행하는 새 이미지를 출력으로 생성하는 이미지를 쉽게 작성할 수 있는 프레임워크입니다.
재현 가능한 컨테이너 이미지를 빌드하는 데 S2I를 사용하는 주요 장점은 개발자가 쉽게 사용할 수 있다는 점입니다. 빌더 이미지 작성자는 이미지에서 최상의 S2I 성능, 빌드 프로세스, S2I 스크립트를 제공하도록 두 가지 기본 개념을 이해해야 합니다.
5.2.5.1. S2I(Source-to-Image) 빌드 프로세스 이해
빌드 프로세스는 최종 컨테이너 이미지로 통합되는 다음 세 가지 기본 요소로 구성됩니다.
- 소스
- S2I(Source-to-Image) 스크립트
- 빌더 이미지
S2I는 첫 번째 FROM
명령으로 빌더 이미지가 포함된 Dockerfile을 생성합니다. 그런 다음 S2I에서 생성된 Dockerfile은 Buildah로 전달됩니다.
5.2.5.2. S2I(Source-to-Image) 스크립트를 작성하는 방법
스크립트를 빌더 이미지 내에서 실행할 수 있는 경우 모든 프로그래밍 언어로 S2I(Source-to-Image) 스크립트를 작성할 수 있습니다. S2I는 assemble
/run
/save-artifacts
스크립트를 제공하는 다양한 옵션을 지원합니다. 이러한 위치는 모두 다음 순서에 따라 각 빌드에서 확인합니다.
- 빌드 구성에 지정된 스크립트입니다.
-
애플리케이션 소스
.s2i/bin
디렉터리에 있는 스크립트입니다. -
라벨이
io.openshift.s2i.scripts-url
인 기본 이미지 URL에 있는 스크립트입니다.
이미지에 지정된 io.openshift.s2i.scripts-url
라벨과 빌드 구성에 지정된 스크립트 모두 다음 양식 중 하나를 취할 수 있습니다.
-
image:///path_to_scripts_dir
: S2I 스크립트가 있는 디렉터리에 대한 이미지 내부의 절대 경로입니다. -
file:///path_to_scripts_dir
: S2I 스크립트가 있는 호스트의 디렉터리에 대한 상대 또는 절대 경로입니다. -
http(s)://path_to_scripts_dir
: S2I 스크립트가 있는 디렉터리에 대한 URL입니다.
스크립트 | 설명 |
---|---|
|
|
|
|
|
이러한 종속 항목은 |
|
|
|
참고
|
S2I 스크립트의 예
다음 예제 S2I 스크립트는 Bash로 작성됩니다. 각 예에서는 tar
콘텐츠가 /tmp/s2i
디렉터리에 압축 해제되어 있다고 가정합니다.
assemble
스크립트:
#!/bin/bash # restore build artifacts if [ "$(ls /tmp/s2i/artifacts/ 2>/dev/null)" ]; then mv /tmp/s2i/artifacts/* $HOME/. fi # move the application source mv /tmp/s2i/src $HOME/src # build application artifacts pushd ${HOME} make all # install the artifacts make install popd
run
스크립트:
#!/bin/bash # run the application /opt/application/run.sh
save-artifacts
스크립트:
#!/bin/bash pushd ${HOME} if [ -d deps ]; then # all deps contents to tar stream tar cf - deps fi popd
usage
스크립트:
#!/bin/bash # inform the user how to use the image cat <<EOF This is a S2I sample builder image, to use it, install https://github.com/openshift/source-to-image EOF
추가 리소스
5.2.6. 빌드 볼륨 사용
빌드 볼륨을 마운트하여 출력 컨테이너 이미지에 유지하지 않으려는 정보에 대한 액세스 권한을 실행 중인 빌드에 제공할 수 있습니다.
빌드 볼륨은 빌드 환경 또는 구성에만 필요한 리포지토리 자격 증명과 같은 중요한 정보를 제공합니다. 빌드 볼륨은 출력 컨테이너 이미지에 데이터가 지속될 수 있는 빌드 입력 과 다릅니다.
실행 중인 빌드가 데이터를 읽는 빌드 볼륨의 마운트 지점은 Pod 볼륨 마운트 와 기능적으로 유사합니다.
프로세스
BuildConfig
오브젝트의sourceStrategy
정의에서volumes
배열에 빌드 볼륨을 추가합니다. 예를 들면 다음과 같습니다.spec: sourceStrategy: volumes: - name: secret-mvn 1 mounts: - destinationPath: /opt/app-root/src/.ssh 2 source: type: Secret 3 secret: secretName: my-secret 4 - name: settings-mvn 5 mounts: - destinationPath: /opt/app-root/src/.m2 6 source: type: ConfigMap 7 configMap: name: my-config 8 - name: my-csi-volume 9 mounts: - destinationPath: /opt/app-root/src/some_path 10 source: type: CSI 11 csi: driver: csi.sharedresource.openshift.io 12 readOnly: true 13 volumeAttributes: 14 attribute: value
- 1 5 9
- 필수 항목입니다. 고유한 이름입니다.
- 2 6 10
- 필수 항목입니다. 마운트 지점의 절대 경로입니다.
..
또는:
을 포함하지 않아야 하며 빌더에서 생성한 대상 경로와 충돌하지 않아야 합니다./opt/app-root/src
는 많은 Red Hat S2I 지원 이미지의 기본 홈 디렉터리입니다. - 3 7 11
- 필수 항목입니다. 소스 유형,
ConfigMap
,Secret
또는CSI
. - 4 8
- 필수 항목입니다. 소스의 이름입니다.
- 12
- 필수 항목입니다. 임시 CSI 볼륨을 제공하는 드라이버입니다.
- 13
- 필수 항목입니다. 이 값은
true
로 설정해야 합니다. 읽기 전용 볼륨을 제공합니다. - 14
- 선택 사항: 임시 CSI 볼륨의 볼륨 속성입니다. 지원되는 속성 키 및 값은 CSI 드라이버의 설명서를 참조하십시오.
공유 리소스 CSI 드라이버는 기술 프리뷰 기능으로 지원됩니다.