다수의 모듈로 구성된 프로젝트에서 버전 번호를 일관성 있게 관리해야 하는 이유는 무엇인가?
- 동일한 패키지에 대해 서로 다른 버전이 사용될 경우, 예를 들어 모듈 A에서는
Serilog.Sinks.Async를 1.1.2 버전으로 사용하고, 모듈 B에서는 1.5.0 버전을 사용한다면, 최종 빌드된 항목에서는 버전 충돌 문제가 발생할 수 있습니다. 대부분의 경우 이는 무시해도 되지만, 배포 환경에서는 문제를 야기할 수 있습니다. - 자동 빌드 파이프라인을 운영하면서도 버전 관리를 중앙에서 통제하지 않으면, 빌드 대상 프로젝트(예: 배포용 C 프로젝트)가 최신 패키지 정보를 반영하지 못하게 됩니다. 특히 개발자 환경에서 해당 프로젝트를 열어 업데이트하지 않으면, GitLab 리포지토리 내의 버전 정의는 오래된 상태로 남아 있고, Docker 이미지 생성 및 실행 시 과거 패키지를 사용하게 됩니다.
Directory.Build.props의 작동 원리
Directory.Build.props는 .NET SDK 내장 기능이며, 빌드 시점에 현재 폴더부터 상위 폴더로 순차적으로 탐색하여 첫 번째 발견된 Directory.Build.props 파일을 적용합니다. 이는 NuGet.Config와 달리 단일 파일만 참조하며, 하위 디렉터리로의 상속 구조 없이 독립적으로 동작합니다.
주요 특징
- 상속 불가: 하위 폴더에서 같은 이름의 파일을 정의해도 부모의 설정은 영향을 받지 않습니다.
- 외부 파일 포함 가능: 일반적인
.csproj파일과 마찬가지로Import를 통해 다른 속성 파일을 포함할 수 있습니다.
공유 전략: 다중 환경에서의 적용
- HTTP 서버를 통한 파일 공유
간단한 웹 서버(예: 배타 등)를 통해Directory.Build.props및 관련 설정 파일을 공유합니다. 모든 환경에서 동일한 버전 정보를 가져올 수 있도록 합니다. - Windows 개발 환경 설정
Visual Studio에서Directory.Build.props를 직접 참조하도록 프로젝트 구조를 구성하고, 네트워크 경로 또는 로컬 복사본을 활용하여 지속적이고 안정적인 적용을 확보합니다. - GitLab Runner에서 파일 다운로드
빌드 스테이지에서 미리 필요한 설정 파일을 다운로드합니다.
이 스크립트는 특정 문서에서 제공되며, 커스텀 도커 이미지 제작 과정에 포함됩니다.build-job: stage: build before_script: - bash $DOWNLOAD_ALL_DIRECTORY_BUILD_PROPS_FILES $DIRECTORY_BUILD_DIST_SERVER_DIRECTORYNAME - 패키징 후 버전 정보 업데이트
빌드 완료 후, 최신 버전 정보를 공유 서버에 반영합니다.
이 스크립트 역시 커스텀 도커 환경에 포함되어 있으며, 빌드 결과에 따라 자동으로 버전 정보를 동기화합니다.update-version: stage: update-version script: - echo "SSH로 서버 접속하여 버전 업데이트..." - bash $DIRECTORY_BUILD_UPDATE_VERSION_SH $DIRECTORY_BUILD_DIST_SERVER_USER $DIRECTORY_BUILD_DIST_SERVER $DIRECTORY_BUILD_DIST_SERVER_DIRECTORYNAME "Directory.Build.Change.EasyComment.props" $EASY_COMMENT_VERSION_ID - Docker 이미지 생성 시 파일 가져오기
커스텀 SDK 이미지를 사용하여 빌드 단계에서 설정 파일을 자동으로 다운로드합니다.
기본FROM docker.amicap.cn/amihome/dotnet/sdk8:2024 AS build WORKDIR / RUN /home/public/download-directory-builds-props.sh dev.amihome.cnmcr.microsoft.com/dotnet/sdk:8.0대신, 커스터마이징된 이미지를 사용함으로써 설정 파일을 자동으로 로드할 수 있도록 구성합니다.