나의 잡다한 노트 및 메모
Jenkins Workspace 란? 본문
Jenkins의 Workspace는 각 빌드(job execution)가 수행되는 디렉토리로, 소스 코드 체크아웃, 빌드 산출물 생성, 테스트 결과 저장 등 빌드 과정에서 필요한 파일들이 위치하는 공간입니다. 아래에 Jenkins Workspace에 대해 자세히 설명드립니다.
1. Workspace의 기본 개념
- 정의:
Workspace는 특정 Job이 실행될 때 해당 빌드와 관련된 파일들을 저장하는 디렉토리입니다. 예를 들어, Git과 같은 소스 코드 저장소에서 코드를 체크아웃(checkout)하여 빌드를 진행하거나, 빌드 도중 생성되는 임시 파일이나 결과물들을 저장하는 데 사용됩니다. - 역할:
- 소스 코드 체크아웃 및 업데이트
- 빌드 스크립트나 설정 파일의 저장
- 빌드 산출물(artifact) 생성 및 저장
- 테스트 실행 결과 및 로그 저장
2. Workspace 생성 및 사용 시점
- 최초 빌드 시:
Job이 처음 실행되거나, 지정된 노드(예: 마스터 또는 에이전트)에 해당 Job의 workspace가 존재하지 않으면, 빌드 시작 시 자동으로 workspace 디렉토리가 생성됩니다. - 노드 변경 시:
동일한 Job이 여러 노드에서 실행될 수 있는데, 각 노드는 독자적인 workspace를 갖습니다. 즉, 특정 에이전트에서 실행되지 않은 Job의 빌드는 그 노드에서 새롭게 workspace를 생성하게 됩니다. - 커스텀 Workspace 설정:
Job 설정에서 별도의 workspace 경로를 지정할 수 있습니다. 이 경우, 지정된 경로가 존재하지 않으면 빌드 실행 시 생성되며, 경로를 직접 관리할 수 있습니다.
3. Workspace의 구성 및 관리
- 파일 및 디렉토리 구성:
Workspace 내에는 소스 코드 파일, 빌드 스크립트, 로그 파일, 테스트 결과 등이 포함됩니다. 이들은 빌드 과정에서 지속적으로 업데이트되고, 필요에 따라 빌드 산출물로서 아카이브될 수도 있습니다. - 클린업(Cleanup) 전략:
- Jenkins는 기본적으로 Workspace를 재사용하지만, 오래된 파일이나 불필요한 파일이 남아 있을 수 있습니다.
- 빌드 후, Workspace를 자동으로 삭제하거나 정리(cleanup)하도록 설정할 수 있으며, 이를 통해 디스크 사용량을 관리할 수 있습니다.
- 일부 플러그인(예: Workspace Cleanup Plugin)을 이용하면 빌드 시작 전후에 특정 파일 또는 디렉토리를 삭제하도록 구성할 수 있습니다.
- 멀티 브랜치 빌드:
멀티 브랜치 파이프라인을 사용하는 경우, 각 브랜치마다 별도의 workspace가 생성될 수 있어, 브랜치 간 파일 충돌이나 의존성 문제를 방지할 수 있습니다.
4. Workspace 사용 시 고려사항
- 동시성 문제:
같은 노드에서 동시에 여러 빌드가 실행되는 경우, 동일한 workspace를 공유하게 되면 파일 충돌이나 빌드 결과의 오염 문제가 발생할 수 있습니다. 이를 해결하기 위해 Jenkins는 각 빌드마다 별도의 작업 디렉토리를 생성하거나, 동시 실행에 대한 제어를 적용할 수 있습니다. - 보안 및 접근 제어:
Workspace 내 파일에는 민감한 정보(예: API 키, 자격증명)가 포함될 수 있으므로, 접근 권한 및 보안 설정이 중요합니다. - 노드 및 디스크 관리:
에이전트 노드의 디스크 공간은 한정적이므로, 불필요한 Workspace 파일이 쌓이지 않도록 주기적으로 정리하는 것이 좋습니다.
5. 실무에서의 활용 예
- CI/CD 파이프라인:
소스 코드를 받아 빌드, 테스트, 배포하는 전체 과정을 Workspace 내에서 진행합니다. - 실행 환경 격리:
서로 다른 Job이나 브랜치 간의 실행 환경을 분리하기 위해, 각 빌드마다 독립된 Workspace를 사용합니다. - 문제 해결 및 디버깅:
빌드 실패 시, Workspace에 남은 로그 파일이나 임시 파일을 확인하여 문제의 원인을 분석할 수 있습니다.
'DevOps > Jenkins' 카테고리의 다른 글
Jenkins parallel 구문 (0) | 2025.03.25 |
---|---|
Jenkins의 Global Trusted Pipeline Library란? (0) | 2025.03.17 |
젠킨스 Parameter (0) | 2025.03.13 |
Jenkins의 Organization Folers (0) | 2024.12.16 |
Declarative pipeline과 Scripted pipeline의 비교 (0) | 2024.12.13 |