4.4. S2I(Source-to-Image) 이미지 테스트 정보

S2I(Source-to-Image) 빌더 이미지 작성자는 S2I 이미지를 로컬에서 테스트하고 자동 테스트와 지속적인 통합을 위해 OpenShift Container Platform 빌드 시스템을 사용할 수 있습니다.

S2I 빌드를 성공적으로 실행하려면 S2I에 assemblerun 스크립트가 있어야 합니다. save-artifacts 스크립트를 제공하면 빌드 아티팩트를 재사용하고 usage 스크립트를 제공하면 S2I 외부에서 컨테이너 이미지를 실행하는 경우 사용 정보가 콘솔에 인쇄되도록 합니다.

S2I 이미지 테스트는 기본 컨테이너 이미지가 변경되거나 명령에 사용된 도구가 업데이트되어도 설명한 모든 명령이 제대로 작동하는지 확인하기 위한 것입니다.

4.4.1. 테스트 요구 사항 이해

test 스크립트의 표준 위치는 test/run입니다. 이 스크립트는 OpenShift Container Platform S2I 이미지 빌더에 의해 호출되며 간단한 Bash 스크립트일 수도 있고 정적 Go 바이너리일 수도 있습니다.

test/run 스크립트는 S2I 빌드를 수행하므로 $PATH에서 S2I 바이너리를 사용할 수 있어야 합니다. 필요한 경우 S2I README의 설치 지침을 따르십시오.

S2I는 애플리케이션 소스 코드와 빌더 이미지를 결합하므로 테스트를 하려면 소스가 실행 가능한 컨테이너 이미지로 변환되는지 확인할 샘플 애플리케이션 소스가 있어야 합니다. 샘플 애플리케이션은 단순하되 assemblerun 스크립트의 중요한 단계를 수행해야 합니다.

4.4.2. 스크립트 및 도구 생성

S2I 도구는 새로운 S2I 이미지 생성 프로세스를 더욱 빠르게 수행할 수 있도록 강력한 생성 도구와 함께 제공됩니다. s2i create 명령에서는 모든 필요한 S2I 스크립트와 테스트 도구를 Makefile과 함께 생성합니다.

$ s2i create _<image name>_ _<destination directory>_

생성된 test/run 스크립트는 유용하게 조정되어야 하지만 개발을 시작하기에 좋은 시작점을 제공합니다.

참고

s2i create 명령으로 생성된 test/run 스크립트를 사용하려면 샘플 애플리케이션 소스가 test/test-app 디렉토리 내에 있어야 합니다.

4.4.3. 로컬에서 테스트

S2I 이미지 테스트를 로컬에서 실행하는 가장 쉬운 방법은 생성된 Makefile을 사용하는 것입니다.

s2i create 명령을 사용하지 않은 경우 다음 Makefile 템플릿을 복사하고 IMAGE_NAME 매개변수를 이미지 이름으로 교체할 수 있습니다.

샘플 Makefile

IMAGE_NAME = openshift/ruby-20-centos7
CONTAINER_ENGINE := $(shell command -v podman 2> /dev/null | echo docker)

build:
	${CONTAINER_ENGINE} build -t $(IMAGE_NAME) .

.PHONY: test
test:
	${CONTAINER_ENGINE} build -t $(IMAGE_NAME)-candidate .
	IMAGE_NAME=$(IMAGE_NAME)-candidate test/run

4.4.4. 기본 테스트 워크플로

test 스크립트에서는 테스트할 이미지를 이미 빌드했다고 가정합니다. 필요한 경우 먼저 S2I 이미지를 빌드합니다. 다음 명령 중 하나를 실행합니다.

  • Podman을 사용하는 경우 다음 명령을 실행합니다.

    $ podman build -t <builder_image_name>
  • Docker를 사용하는 경우 다음 명령을 실행합니다.

    $ docker build -t <builder_image_name>

다음 단계에서는 S2I 이미지 빌더를 테스트하는 기본 워크플로를 설명합니다.

  1. usage 스크립트가 작동 중인지 확인합니다.

    • Podman을 사용하는 경우 다음 명령을 실행합니다.

      $ podman run <builder_image_name> .
    • Docker를 사용하는 경우 다음 명령을 실행합니다.

      $ docker run <builder_image_name> .
  2. 이미지를 빌드합니다.

    $ s2i build file:///path-to-sample-app _<BUILDER_IMAGE_NAME>_ _<OUTPUT_APPLICATION_IMAGE_NAME>_
  3. 선택사항: save-artifacts를 지원하는 경우 2단계를 다시 한번 실행하여 아티팩트 저장 및 복원이 제대로 작동하는지 확인합니다.
  4. 컨테이너를 실행합니다.

    • Podman을 사용하는 경우 다음 명령을 실행합니다.

      $ podman run <output_application_image_name>
    • Docker를 사용하는 경우 다음 명령을 실행합니다.

      $ docker run <output_application_image_name>
  5. 컨테이너가 실행 중이고 애플리케이션이 응답하는지 확인합니다.

일반적으로 이러한 단계를 실행하면 빌더 이미지가 예상대로 작동하는지 충분히 확인할 수 있습니다.

4.4.5. 이미지 빌드에 OpenShift Container Platform 사용

새로운 S2I 빌더 이미지를 구성하는 Dockerfile 및 기타 아티팩트가 있으면 git 리포지터리에 배치한 후 OpenShift Container Platform을 사용하여 이미지를 빌드하고 푸시할 수 있습니다. 리포지터리를 가리키는 Docker 빌드를 정의합니다.

OpenShift Container Platform 인스턴스가 공용 IP 주소에서 호스트된 경우 S2I 빌더 이미지 GitHub 리포지터리로 푸시할 때마다 빌드가 트리거될 수 있습니다.

ImageChangeTrigger를 사용하면 업데이트된 S2I 빌더 이미지를 기반으로 하는 애플리케이션의 다시 빌드를 트리거할 수도 있습니다.