이전 포스팅에서 Jenkins에서 빌드 설정을 위한 사전 작업과 빌드 구성에 대해 다뤘다.
Jenkins에서 빌드 설정을 위한 사전 작업은 다음 포스팅을 참고한다.
Jenkins에서 빌드 구성하는 방법은 다음 포스팅을 참고한다.
배포할 빌드 버전을 빌드할때마다 수동으로 입력하도록 되어 있는 점은 여러 가지 문제가 있어 아쉬운 부분이다.
- 매번 입력하는 것도 번거롭다.
- 버전 정보 입력에서 실수 가능성 (휴먼에러)도 높다.
- 형상 관리에서 변경이 발생했을 때 배포할 버전 지정을 할 수 없어 자동 빌드가 어렵다.
소스 코드에 기재 된 버전 정보를 사용하여 자동으로 입력할 수 있으면 이러한 문제들을 해결 할 수 있다.
빌드 에이전트에서 소스 코드에 기재 된 버전 정보를 확인해도, Jenkins의 환경 변수로 전달되어야 배포할 때 사용할 수 있다.
- 기본적으로 Jenkins의 환경 변수를 빌드 에이전트의 환경 변수로 전달하여 사용할 수 있다.
- 그러나 빌드 에이전트의 환경 변수나 정보를 Jenkins로 전달 할 수는 없다.
- 별도 플러그인을 설치하면 빌드 에이전트의 환경 변수나 정보를 Jenkins로 전달할 수 있다.
이 부분에서 시행 착오를 많이 했는데, 플러그인 하나로 생각보다 쉽게 해결 가능하다.
다음과 같은 순서로 진행한다.
- 플러그인 설치
- 빌드 설정 변경
- 빌드 수행 및 배포 결과 확인
플러그인 설치
빌드 에이전트의 로컬 환경 변수나 필요 정보를 Jenkins 환경 변수로 전달하는 것이 핵심이다.
Environment Injector Plugin 플러그인을 설치하면 가능하다.
Jenkins 관리 - 플러그인 관리로 이동하여 설치 가능 탭에서 Environment Injector 플러그인을 검색하여 설치한다.
빌드 설정 변경
설치한 Environment Injector 플러그인을 사용하여 기존 빌드 설정을 변경해야 한다.
이전 포스팅에서 구성한 빌드 설정을 기반으로 작성한 내용이므로, 전체 빌드 구성은 다음 포스팅을 참고한다.
Jenkins에서 빌드할 프로젝트의 이름을 클릭한다.
좌측의 구성을 클릭한다.
General 설정 변경
기존에 String Paramter를 사용하여 APP_VERSION 환경 변수에 버전을 입력 받는 부분을 제거한다.
APP_VERSION에 대한 String Parameter 우측 상단의 X 표시를 클릭하면 제거할 수 있다.
Build 설정 변경
소스코드에서 버전 정보를 추출해서 Jenkins의 환경 변수로 전달하는 작업을 추가한다.
Add build step에서 Execute Windows batch command, Inject environment variables 기능을 사용한다.
- Execute Windows batch command - 소스 코드에서 버전 정보를 추출하는 배치 명령 스크립트 (BAT)를 실행한다.
- Inject environment variables - 추출한 버전 정보를 Jenkins 환경 변수로 전달한다.
Add build step을 클릭하여 Execute Windows batch command 추가하고 MSBuild 다음 단계로 옮긴다.
- Execute Windows batch command 좌측의 ::: 부분을 클릭하고 원하는 위치로 이동하면 된다.
- Command 부분은 다음과 같이 입력한다.
현재 사용 중인 Visual Studio C++ 프로젝트의 폴더 구조에서 버전 정보는 Build\MD5Viewer 하위의 version.h에서 관리한다.
프로젝트 폴더 구조는 아래 포스팅을 참고한다.
Visual Studio C++ 프로젝트의 버전 관리는 다음 포스팅을 참고한다.
version.h 파일은 다음과 같이 되어 있다.
Command에 입력한 코드는 version.h에서 상위 4줄의 숫자 정보를 가져와서 .으로 연결하는 코드이다. (ex. 1.0.13.0)
:: 진행과정 출력을 OFF한다.
@echo off
:: 반복문의 경우 최종 결과만 남으므로, 순차적으로 처리하기 위한 옵션 지정
setlocal enabledelayedexpansion
:: version.h에서 정규식으로 숫자가 포함된 행만 추출하여 version.txt 파일에 저장
findstr /r " [0-9]" Build\MD5Viewer\version.h > version.txt
:: version.txt에서 한줄씩 읽고 스페이스 (빈칸)로 잘라서 마지막 숫자만 추출하고
:: 숫자들을 .으로 연결 (1.0.13.0. 형태)
for /f "tokens=3 delims= " %%A in (version.txt) do (
set TEST=!TEST!.%%A
)
:: 문자열의 마지막 .을 제거하고 version.txt 파일에 저장 (1.0.13.0. -> 1.0.13.0)
echo APP_VERSION=%TEST:~1% > version.txt
Add build step을 클릭하여 Inject environment variables 추가하고 Execute Windows batch command 다음에 위치시킨다.
- Properties File Path - 위에서 생성한 version.txt 파일의 경로를 지정한다. 파일을 Workspace 경로에 생성하므로 파일명만 작성한다.
- Properties Content - 특정 환경 변수를 추가하거나 수정할 수 있는 명령을 직접 작성한다. 사용하지 않았다.
빌드 수행 및 배포 결과 확인
빌드 구성을 변경하면 빌드를 수행해서 정상적으로 적용되었는지 확인한다.
Jenkins에서 빌드할 프로젝트의 이름을 클릭한다.
좌측의 Build with Parameters를 클릭한다.
APP_VERSION에 대한 String Parameter를 제거했기 때문에, 버전 입력하는 부분이 보이지 않는다.
빌드할 브랜치를 선택하고 빌드하기를 클릭한다.
좌측 하단의 #빌드번호를 클릭하여 진행 중인 빌드의 상세 페이지로 이동한다.
빌드의 상세 페이지에 있는 좌측 Console Output을 클릭하여 빌드 로그를 확인한다.
- Execute Windows batch command 추가한 배치 명령이 bat 파일로 전달되어 실행되었다.
- Inject environment variables가 실행되어 version.txt 파일에 접근해서 환경 변수 등록이 되었다.
- 소스코드의 버전 정보가 APP_VERSION 환경 변수에 잘 전달되어 Version: 부분에 잘 표시 되었다.
Nexus에서 확인해보면 정상적으로 업로드 된 것을 확인할 수 있다.
Nexus artifact uploader에서 Artifacts의 Classifier는 지정하지 않았다.
'::: IT인터넷 :::' 카테고리의 다른 글
파이썬 프로젝트 폴더 구성하기 (0) | 2021.09.02 |
---|---|
Jenkins 빌드에서 Git 경로로 릴리즈와 개발중 배포 구분하여 설정하기 (0) | 2021.08.30 |
Jenkins에서 윈도우 에이전트를 이용한 Visual Studio 빌드 구성 (2) (0) | 2021.08.23 |
Jenkins에서 윈도우 에이전트를 이용한 Visual Studio 빌드 구성 (1) (0) | 2021.08.19 |
리눅스 Docker 컨테이너를 Jenkins 에이전트로 연결하기 (via. SSH) (0) | 2021.08.16 |