본문 바로가기
공부

[Jenkins] 워크스페이스 동기화

by samosa 2024. 11. 20.

Jenkins는 각 파이프라인 빌드마다 워크스페이스라는 작업 디렉터리를 사용하여 소스 코드와 빌드 산출물을 저장한다. Jenkins의 워크스페이스는 기본적으로 빌드가 실행되는 에이전트의 파일 시스템에 존재한다.

예제

이 Jenkins Pipeline 코드에서는 두 개의 스테이지가 있으며, 하나는 Docker 없이 실행되고, 다른 하나는 Docker 컨테이너 내에서 실행된다.

  1. 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
            '''
        }
    }
  2. 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를 사용하여 격리된 환경에서 빌드를 수행해도 결과물을 호스트와 동기화할 수 있다.