소개
Fieldlight Studio에는 공유할 정원 사진 세 장이 있습니다. 원본은 준비되어 있지만, 큰 원본 이미지는 빠르게 검토하기에 불편합니다. 준비된 이미지 도구를 사용하여 작은 미리보기와 콘택트 시트를 만듭니다. 콘택트 시트는 전체 컬렉션을 한눈에 보여 주는 이미지 한 장입니다.
이 도구는 연결된 Jenkins 에이전트 중 하나에 설치되어 있습니다. 첫 번째 과제는 실제로 이 작업을 수행할 수 있는 에이전트를 선택하는 것입니다. 그런 다음 더 작은 크기로 전달해 달라는 요구에 대응하고, 성공한 두 버전을 모두 보관하며, 원본 사진을 안전하게 유지합니다.
전제 지식은 Jenkins 페이지 탐색과 짧은 Declarative Pipeline을 알아보는 능력입니다. Java 프로그래밍, 사진 편집 명령, Docker 관리 또는 에이전트 설치는 필요하지 않습니다. 제공된 프로그램과 에이전트 연결은 준비되어 있습니다. 두 에이전트는 하나의 훈련용 VM에 있는 별도 컨테이너입니다. 파일시스템은 독립적이지만 커널은 공유합니다. 클라우드 장비 집합이 아닙니다. Fieldlight는 가상의 스튜디오이며, 사진은 AI로 생성한 학습 자료입니다. 소요 시간은 작성자의 예상치이며, 초보자를 대상으로 측정한 값은 아닙니다.
작업에 맞는 에이전트 선택하기
이 단계에서는 원본을 살펴보고, 도구가 없어서 발생하는 예상된 실패를 관찰한 다음, 이미지 처리 능력이 있는 에이전트에 작업을 배정합니다. Photo Desk에서 시작하세요.
Garden Stories 컬렉션에는 라벤더, 정원 길, 물뿌리개가 있습니다. 각 사진을 열어 전체 원본을 살펴보고, 브라우저의 Back 동작으로 데스크로 돌아가세요. 라벤더 사진의 Download original을 선택하고 비교용으로 보관하세요. 원본 너비는 1536픽셀이며 변경하지 않아야 합니다. 데스크에는 처음에 No completed collection yet가 표시됩니다.
Jenkins로 전환하세요. Jenkins의 컨트롤러는 작업 설정을 보관하고 빌드를 조율합니다. 에이전트는 빌드 작업을 수행하는 연결된 프로세스입니다. 노드는 Jenkins에 설정된 해당 에이전트의 항목입니다. 실행기(executor)는 해당 노드에서 작업을 수행할 수 있는 슬롯 하나입니다. 여기서는 각 에이전트에 실행기가 하나 있으므로, 한 번에 할당된 작업 블록 하나를 수행할 수 있습니다.
대시보드에서 Manage Jenkins를 선택한 다음 Nodes를 선택하세요. image-studio와 pack-studio를 차례로 살펴보세요. 둘 다 연결되어 있습니다. 능력 레이블은 각각 photo-imaging과 photo-packing이며, 둘 다 linux도 가지고 있습니다. 레이블은 스케줄링 조건이며, 소프트웨어를 설치하는 기능이 아닙니다. 이미지 도구는 image-studio에만 있고, 패키징 도구는 pack-studio에만 있습니다. 실제로 분리된 에이전트 프로세스와 컨테이너입니다.
왼쪽 위의 Jenkins 로고로 대시보드에 돌아간 다음 preview-photos를 여세요. Configure를 선택한 다음 Pipeline 섹션으로 이동하세요. Script 편집기에는 준비된 작업이 들어 있습니다. 변경하기 전에 구조를 읽어 보세요.
- 맨 위의
agent none은 Pipeline 전체가 에이전트 하나를 예약하지 않는다는 뜻입니다. 단계가 자체 에이전트를 선택합니다. stage('Prepare photos')는 작업의 이름을 정합니다. 현재 그 안의agent { label 'photo-packing' }는 패키징 능력을 요청합니다.steps에는 실행할 연산이 들어 있습니다.sh는 선택된 에이전트의 셸에서 따옴표 안의 명령을 실행합니다. 제공된/opt/fieldlight/prepare-photos프로그램은 미리보기를 만듭니다.--width 480은 너비 480픽셀을 요청하고 원본의 가로세로 비율을 유지합니다. 작은따옴표는 해당 명령을 하나의 Groovy 문자열로 묶습니다.deleteDir()는 이 작업에 할당된 작업 공간, 즉 빌드 파일이 있는 임시 디렉터리를 비웁니다. 첫 번째 호출은 빈 상태에서 시작하게 합니다.post섹션의always호출은 실패한 경우를 포함하여 단계가 끝난 뒤 작업 공간을 비웁니다./opt/fieldlight/originals아래의 원본은 제거하지 않습니다.archiveArtifacts는 정리 전에 일치하는 파일을 Jenkins에 보관합니다.prepared/**에서**는 하위 디렉터리 안의 파일도 포함합니다.fingerprint: true는 추적할 수 있도록 파일 식별 정보를 기록하며, 고객의 승인이나 서명은 아닙니다.
스크립트를 편집하지 않고 작업 페이지로 돌아가세요. Build Now를 한 번 선택하세요. Build History에서 새 번호의 빌드를 연 다음 Console Output을 선택하세요. 끝날 때까지 기다리세요. 이 첫 실패는 예상된 것입니다. 콘솔은 pack-studio를 식별한 다음 /opt/fieldlight/prepare-photos를 not found라고 보고하고 FAILURE로 끝납니다. 요청한 에이전트는 연결되어 있지만, 이 역할의 도구가 없습니다. 오프라인 상태이거나 일치하지 않는 에이전트를 무기한 기다리는 것과는 다릅니다.
preview-photos로 돌아가 Configure를 선택하고 Pipeline을 다시 여세요. 단계의 레이블만 photo-packing에서 photo-imaging으로 바꾸세요. 전체 버전을 복사하려면 Script 안을 클릭하고 Windows/Linux에서는 Ctrl+A, macOS에서는 Command+A로 모두 선택한 다음 내용을 아래와 같이 바꾸세요.
pipeline {
agent none
stages {
stage('Prepare photos') {
agent { label 'photo-imaging' }
steps {
deleteDir()
sh '/opt/fieldlight/prepare-photos --width 480'
archiveArtifacts artifacts: 'prepared/**', fingerprint: true
}
post {
always { deleteDir() }
}
}
}
}
도구 명령, 원본, 아티팩트 보관, 두 정리 호출을 유지하세요. Save를 선택한 다음 Build Now를 선택하세요. 새 빌드의 Console Output을 열고 Finished: SUCCESS를 기다리세요. image-studio가 표시되고 3 previews at 480 pixels wide가 보고된 다음, Archiving artifacts, Recording fingerprints, 마지막 deleteDir가 나타나야 합니다. 이는 단순히 메시지 이름을 바꾼 것이 아니라, 해당 능력이 있는 에이전트에서 실제 작업이 이루어졌다는 증거입니다.
Groovy 구문 오류가 보이면 Configure로 돌아가 위의 전체 스크립트를 복원하고, 저장한 다음 새 빌드를 실행하세요. 레이블의 철자가 잘못되어 빌드가 대기열에 남으면 해당 항목의 취소 아이콘을 선택하고, Jenkins 확인창에서 Yes를 선택하세요. 그런 다음 레이블을 수정하고 다시 빌드하세요. 명령 철자 오류는 콘솔에 명령을 찾을 수 없다는 오류로 나타납니다. 다른 도구를 설치하지 말고 제공된 경로를 복원하세요. 처음 실패한 빌드와 이후의 모든 이력을 유지하세요. 일반적인 실수는 스크립트를 다시 저장하고 빌드하여 수정할 수 있습니다. VM을 초기화하지 마세요.
Photo Desk로 전환하고 새로 고침하세요. Open prepared collection을 선택하세요. 작은 미리보기 세 개는 원본과 같은 정원 피사체를 보여야 합니다. Open contact sheet를 선택하여 세 장을 함께 보고, 브라우저의 Back으로 돌아오세요. Caption table과 Image details를 열고, 각각 확인한 뒤 Back으로 돌아오세요. captions.csv는 쉼표로 값을 구분하는 일반 텍스트 표입니다. 첫 번째 행에는 열 이름이 있고, 이후 각 행은 이미지 하나를 설명합니다. 각 설명을 해당 images/ 파일과 연결하고 너비 480과 높이 320을 기록합니다. preparation.json은 garden과 너비 480을 식별합니다.
Jenkins로 돌아가 성공한 빌드의 페이지를 여세요. Build Artifacts 아래에서 개별 PNG 파일 이름 링크를 누르면 브라우저에서 이미지가 열립니다. 전체를 다운로드하려면 Build Artifacts 제목을 선택한 다음 파일 탐색 페이지에서 **(all files in zip)**을 선택하세요. 480픽셀 버전용 폴더에 archive.zip을 저장하고 ZIP 전체를 그곳에 추출하세요. 여섯 파일은 archive/prepared/ 아래에 있으며 images/ 하위 디렉터리도 포함됩니다. 브라우저나 이미지 뷰어에서 archive/prepared/images/garden-01.png와 archive/prepared/contact-sheet.png를 열고, 텍스트 편집기에서 archive/prepared/captions.csv를 읽으세요. 눈에 보이는 내용이 컬렉션과 일치해야 합니다. 라벤더 미리보기는 480 × 320픽셀이며, 다운로드한 원본은 여전히 1536 × 1024입니다. 다음 단계를 위해 성공한 이 빌드의 번호와 추출한 폴더 전체를 보관하세요. 보관된 이 파일들은 작업 공간이 비워진 뒤에도 계속 사용할 수 있습니다.

준비된 컬렉션은 원본과 같은 라벤더, 정원 길, 물뿌리개 피사체를 보여 줍니다. 콘택트 시트와 파일 링크로 실제 보관된 결과물을 살펴보세요.
더 작은 미리보기 묶음 전달하기
이 단계에서는 너비 320픽셀 전달 요청을 충족하고, 비교를 위해 이전의 480픽셀 묶음도 보관합니다. Photo Desk에서 시작하고 Back to originals로 원본으로 돌아가세요. 전체 원본 세 장을 모두 계속 사용할 수 있는지 확인하세요.
이제 고객은 정확히 320 pixels wide, 즉 너비 320픽셀의 미리보기를 원합니다. 제공된 프로그램은 기존 --width 옵션으로 이 요구를 받아들입니다. 이미지 프로그램을 편집하거나 교체하지 않습니다. Jenkins로 전환하여 preview-photos로 돌아가 Configure → Pipeline을 선택하세요. --width 480을 --width 320으로 바꾸세요. 변경할 곳은 sh 명령 안입니다. 이제 전체 스크립트는 다음과 같아야 합니다.
pipeline {
agent none
stages {
stage('Prepare photos') {
agent { label 'photo-imaging' }
steps {
deleteDir()
sh '/opt/fieldlight/prepare-photos --width 320'
archiveArtifacts artifacts: 'prepared/**', fingerprint: true
}
post {
always { deleteDir() }
}
}
}
}
Save를 선택한 다음 Build Now를 선택하세요. 새 빌드가 SUCCESS로 끝날 때까지 기다리세요. Console Output에서 image-studio가 작업을 수행했고, 프로그램이 320 pixels wide를 보고했으며, 보관과 정리가 실행되었는지 확인하세요. 콘솔에 여전히 480이 표시되면 변경한 스크립트를 저장했는지, 이전 빌드가 아니라 새 빌드를 열었는지 확인하세요.
이 빌드 페이지에서 Build Artifacts를 선택한 다음 **(all files in zip)**을 선택하세요. 새 archive.zip을 480픽셀 버전과 다른 폴더에 저장하고 전체를 추출하세요. 그 안의 archive/prepared/ 디렉터리 아래 파일들을 여세요. 이제 미리보기 이미지 세 장이 모두 320 × 213픽셀이어야 합니다. 높이 213픽셀은 1536 × 1024 원본의 가로세로 비율을 유지한 결과를 반올림한 값입니다. 콘택트 시트에는 여전히 같은 순서로 세 피사체가 모두 들어 있습니다. 이는 별도의 개요 이미지이며, 네 번째 원본을 크기 조정한 것이 아닙니다. captions.csv에서 각 이미지의 파일 이름, 설명, 크기가 일치해야 합니다. preparation.json은 garden과 너비 320을 식별해야 합니다.
Photo Desk로 전환하고 새로 고침한 뒤 Open prepared collection을 선택하세요. 새 미리보기 세 장, 콘택트 시트, 두 메타데이터 파일을 모두 살펴보세요. 원본으로 돌아가 전체 크기 내용이 변경되지 않았는지 확인하세요. 그런 다음 Jenkins로 전환하여 적어 둔 이전 성공 빌드 번호를 열고, Build Artifacts → **(all files in zip)**을 통해 전체 ZIP을 다시 다운로드하세요. 또 다른 새 폴더에 추출하세요. 라벤더 미리보기는 여전히 480 × 320픽셀이어야 합니다. 새 버전을 만들 때 이전 아카이브가 다시 쓰여서는 안 됩니다.
다운로드한 파일의 크기나 피사체가 예상과 다르면 빌드 번호와 저장된 너비 옵션을 확인한 다음, 스크립트를 수정하고 새 빌드를 실행하세요. 원본 사진, 제공된 도구, 연결된 에이전트, 능력 레이블, 전체 빌드 이력을 보존하세요. 에이전트 파일시스템 사이에 파일을 복사하거나, 정리를 제거하거나, 다른 실행의 아카이브로 대체하지 마세요. 저장된 스크립트가 실제로 성공적으로 빌드된 상태로 마치세요. 이제 사용할 수 있는 더 작은 묶음, 온전한 이전 버전, 변경되지 않은 원본이 있습니다.
요약
실제 이미지 처리 능력을 Jenkins 에이전트 레이블과 연결하고, 도구가 없어서 발생하는 예상된 실패를 해석한 뒤 사용할 수 있는 미리보기를 만들었습니다. 너비 옵션을 바꾸어 원본이나 이전 아카이브를 변경하지 않고 더 작은 결과물을 전달했습니다. Jenkins 자체 아티팩트는 작업 공간이 비워진 뒤에도 남았습니다. 다음 독립 실습에서는 별도의 작업 공간 두 개와 같은 실행 안에서 이루어지는 임시 전달을 사용합니다.



