Jenkins는 각 파이프라인 빌드마다 워크스페이스라는 작업 디렉터리를 사용하여 소스 코드와 빌드 산출물을 저장한다. Jenkins의 워크스페이스는 기본적으로 빌드가 실행되는 에이전트의 파일 시스템에 존재한다.
예제
이 Jenkins Pipeline 코드에서는 두 개의 스테이지가 있으며, 하나는 Docker 없이 실행되고, 다른 하나는 Docker 컨테이너 내에서 실행된다.
w/o docker
단계:- Docker 없이 Jenkins 에이전트의 기본 환경에서 실행된다.
echo "Without docker"
명령어를 출력하고 현재 디렉터리의 내용을ls -la
로 나열한다.container-no.txt
파일을 생성하여 워크스페이스에 기록한다.
stage('w/o docker') { steps { sh ''' echo "Without docker" ls -la touch container-no.txt ''' } }
w/ docker
단계:node:18-alpine
Docker 이미지를 사용하여 컨테이너 안에서 빌드를 수행한다.reuseNode true
옵션을 통해 Jenkins는 컨테이너 내의 워크스페이스와 호스트의 워크스페이스를 공유하고 동기화한다. 이는 Docker 컨테이너 내에서 실행되는 빌드 단계에서도 호스트 워크스페이스의 파일을 액세스하고 수정할 수 있도록 한다.echo "With docker"
명령어를 출력하고 현재 디렉터리의 내용을 나열한다.container-yes.txt
파일을 생성하여 워크스페이스에 기록한다.
stage('w/ docker') { agent { docker { image 'node:18-alpine' reuseNode true } } steps { sh ''' echo "With docker" ls -la touch container-yes.txt ''' } }
- Docker 컨테이너 내에서의 작업:
reuseNode
옵션이 활성화된 상태에서 Docker 컨테이너를 사용할 경우, 컨테이너가 Jenkins의 기본 워크스페이스를 공유한다. 이로 인해 Docker 내에서 생성되거나 수정된 파일은 호스트 워크스페이스에도 반영되며, 빌드 프로세스가 일관되게 유지된다. - 장점: 개발 환경 간의 차이 없이 동일한 워크스페이스를 사용하여 작업할 수 있으며, Docker를 사용하여 격리된 환경에서 빌드를 수행해도 결과물을 호스트와 동기화할 수 있다.
'공부' 카테고리의 다른 글
C# 12 새로운 기능: Primary Constructor (0) | 2024.12.03 |
---|---|
[Jenkins] Pipeline 코드에서 사용할 수 있는 리눅스 명령어 (0) | 2024.11.20 |
[Jenkins] Freestyle과 Pipeline (1) | 2024.11.19 |
[Node] Module wrapper function (1) | 2024.11.19 |
AWS S3 개념 (2) 오브젝트 (1) | 2024.09.15 |