::: IT인터넷 :::

Jenkins 빌드에서 Git 경로로 릴리즈와 개발중 배포 구분하여 설정하기

곰탱이푸우 2021. 8. 30. 08:20

이전 포스팅에서 Jenkins에서 빌드 설정을 위한 사전 작업과 빌드 구성에 대해 다뤘다.

 

Jenkins에서 빌드 설정을 위한 사전 작업은 다음 포스팅을 참고한다.

 

Jenkins에서 윈도우 에이전트를 이용한 Visual Studio 빌드 구성 (1)

이제 Jenkins에 등록한 윈도우 에이전트를 이용하여 Visual Studio 빌드를 구성한다. Jenkins와 Nexus에 추가로 설정할 것들이 있기 때문에 사전 준비와 빌드 설정을 나눠서 포스팅한다. 빌드 구성에 필요

www.bearpooh.com

 

Jenkins에서 빌드 구성하는 방법은 다음 포스팅을 참고한다.

 

Jenkins에서 윈도우 에이전트를 이용한 Visual Studio 빌드 구성 (2)

이전 포스팅에서 Jenkins의 빌드 구성을 위한 사전 작업을 진행했다. Jenkins에서 윈도우 에이전트를 이용한 Visual Studio 빌드 구성 (1) 이제 Jenkins에 등록한 윈도우 에이전트를 이용하여 Visual Studio 빌

www.bearpooh.com

 

배포할 때 개발 중인 버전과 릴리즈 버전이 같은 저장소에 저장되는 점은 여러 가지 문제가 있어 아쉬운 부분이다.

  • 개발 중인 버전과 릴리즈 버전이 섞이면 구분이 어렵다.
  • 개발 중인 버전이 쉽게 제거할 수 있어야 한다.

 

일반적으로 릴리즈 버전은 master (또는 main) 브랜치에서 수행하고, 개발 버전은 별도의 브랜치를 생성해서 진행한다.

브랜치 이름으로 개발 버전인지 릴리즈 버전인지 구분할 수 있고, 해당 조건으로 분기해서 각각 다른 저장소에 업로드하면 된다.

 

다행히도 Jenkins에서 이렇게 분기할 수 있는 플러그인을 제공하기 때문에 생각보다 쉽게 해결 가능하다.

 

다음과 같은 순서로 진행한다.

  • Nexus에 Snapshot 빌드 저장소 생성
  • 플러그인 설치
  • 빌드 설정 변경
  • 빌드 수행 및 배포 결과 확인

 

 

Nexus에 Snapshot 빌드 저장소 생성

작업 중인 브랜치에서 빌드한 Snapshot 버전을 저장하기 위한 Snapshot 저장소를 Nexus에 생성한다.

 

Nexus에 저장소 생성하는 방법은 다음 포스팅을 참고한다.

 

exe 파일 Nexus에 배포하기

Visual Studio에서 빌드를 하면 EXE 또는 DLL 파일이 생성된다. EXE 파일의 경우 바로 사용 가능하기 때문에 배포해야 하는데 방법은 여러가지가 있다. FTP 서버를 사용한다. 웹서버를 사용한다. 사설 저

www.bearpooh.com

 

raw 타입의 exe-snapshot-repos 저장소를 생성했다.

 

참고로 일반적인 개발 버전은 dev라는 이름으로 사용해도 되는데, 자바와 스칼라에서는 개발 중인 버전을 snapshot으로 부른다.

개인적으로 스칼라 개발을 약 3년간 해서 그런지 더 익숙한 snapshot 용어를 사용했는데 dev로 사용해도 좋을 것 같다.

snapshot은 너무 길어서 불편하다.

 

플러그인 설치

빌드가 완료되어 exe 파일이 생성 된 이후, 브랜치 이름에 따라 업로드 경로를 다르게 하는 것이 핵심이다.

 

Conditional BuildStep 플러그인을 설치하면 가능하다.

 

Jenkins 관리 - 플러그인 관리로 이동하여 설치 가능 탭에서 Conditional BuildStep 플러그인을 검색하여 설치한다.

 

 

빌드 설정 변경

설치한 Conditional BuildStep 플러그인을 사용하여 기존 빌드 설정을 변경해야 한다.

 

이전 포스팅에서 구성한 빌드 설정을 기반으로 작성한 내용이므로, 전체 빌드 구성은 다음 포스팅을 참고한다.

 

Jenkins에서 윈도우 에이전트를 이용한 Visual Studio 빌드 구성 (1)

이제 Jenkins에 등록한 윈도우 에이전트를 이용하여 Visual Studio 빌드를 구성한다. Jenkins와 Nexus에 추가로 설정할 것들이 있기 때문에 사전 준비와 빌드 설정을 나눠서 포스팅한다. 빌드 구성에 필요

www.bearpooh.com

 

Jenkins에서 빌드할 프로젝트의 이름을 클릭한다.

 

좌측의 구성을 클릭한다.

 

기존에 추가했던 Nexus artifact uploader 우측 상단의 X를 클릭하여 제거한다.

 

 

main (master) 브랜치인 경우

Add Build step을 클릭하고 Conditional step (single)을 클릭한다.

분기 이후 다수의 작업을 수행하려면 Conditional steps (multiple)을 선택한다.

 

Conditional step (single) 블럭을 Build a Visual Studio project or solution using MSBuild 블럭 뒤로 위치시킨다.

Conditional step (single) 좌측의 ::: 부분을 클릭하고 원하는 위치로 이동하면 된다.

 

main (master) 브랜치인 경우에 대한 처리를 추가한다.

  • Run? 부분의 조건을 String match를 선택한다.
  • String 1은 Jenkins의 환경 변수인 ${GIT_BRANCH}를 입력한다. 빌드 시작할때 선택하는 브랜치 이름이 전달된다.
  • String 2는 origin/main을 입력한다. Git 설정에 따라 origin/master인 경우도 있으므로 확인을 잘 해야 한다.

 

바로 아래에 Builder 항목이 있는데 수행할 작업을 선택한다. Add build step을 클릭했을때와 동일한 메뉴가 나온다.

  • Builder - Nexus artifact uploader를 선택한다.
  • Nexus Version - NEXUS3를 선택한다.
  • Protocol - HTTPS로 설정되어 있으므로 HTTPS를 선택한다.
  • Nexus URL - NEXUS의 주소와 포트를 입력한다. URL:Port만 입력한다. (ex. nexus.test.com:1234)
  • Credentials - Jenkins 환경 설정의 Nexus3 설정에서 입력한 jenkinsbuild를 선택한다.

 

 

Credentials에 선택 가능한 계정이 없다면 Add - Jenkins 버튼을 누르고 계정 정보를 입력한다.

  • Kind - Username with password 선택
  • Username - Nexus3의 ID를 입력한다. Nexus3에 jenkinsbuild 계정을 생성했기 때문에 jenkinsbuild을 입력한다.
  • Password - Username에 입력한 계정의 비밀번호를 입력한다.

 

Nexus3에 업로드할 경로에 대한 정보를 입력한다.

  • GroupId - 산출물이 저장 될 최상위 경로. 일반적으로 프로젝트명을 입력한다.
  • Version - 산출물의 버전 정보. 일단 String Parameter 로 전달 받은 ${APP_VERSION} 입력한다.
  • Repository - 산출물이 저장 될 저장소 이름. exe-repos 저장소를 사용할 것이므로 exe-repos를 입력한다.

 

APP_VERSION은 General 탭에서 String Parameter로 설정했기 때문에 환경 변수 형태로 전달해야 한다.

 

APP_VERSION 환경 변수를 String Parameter로 입력 받는 대신 자동으로 설정하는 방법은 다음 포스팅을 참고한다.

 

Jenkins에서 빌드 산출물을 배포할때 자동으로 버전 지정하기

이전 포스팅에서 Jenkins에서 빌드 설정을 위한 사전 작업과 빌드 구성에 대해 다뤘다. Jenkins에서 빌드 설정을 위한 사전 작업은 다음 포스팅을 참고한다. Jenkins에서 윈도우 에이전트를 이용한 Visu

www.bearpooh.com

 

추가 정보를 입력한다.

  • ArtifactId - Nexus3에 저장 될 파일의 이름을 입력한다. 산출물 파일 이름이 아닌 Nexus3에 저장 될 이름이다.
  • Type - 파일의 확장명을 입력한다. exe 파일이므로 exe를 입력한다.
  • Classifier - 플랫폼(x86/x64), 언어 구분(kr/en ) 등 부가 정보를 입력한다. 테스트로 123을 입력했다.
  • File - 업로드 될 파일의 경로를 지정한다.

 

 

작업을 위한 branch인 경우

main (또는 master) 브랜치에 대한 설정이 완료되면, 작업 중인 브랜치에 대한 설정을 해야 한다.

origin/main (또는 origin/master)가 아닌 모든 브랜치는 개발 중인 브랜치이다.

 

main (또는 master) 브랜치에 대한 설정과 거의 유사하고 두 가지만 차이가 있다.

  • 브랜치 이름에 대한 판단 부분에 Not 조건 추가
  • 배포할 저장소가 exe-repos가 아닌 exe-snapshot-repos

 

다시 Add Build step을 클릭하고 Conditional step (single)을 클릭한다.

분기 이후 다수의 작업을 수행하려면 Conditional steps (multiple)을 선택한다.

 

Conditional step (single) 블럭을 먼저 추가한 Conditional step (single) 블럭 뒤로 위치시킨다.

Conditional step (single) 좌측의 ::: 부분을 클릭하고 원하는 위치로 이동하면 된다.

 

Run? 부분을 Not으로 선택하고, 나머지 부분은 main (또는 master) 브랜치에 대한 설정과 동일하게 입력한다.

  • GIT_BRANCH 환경 변수 값이 origin/main이 아닌 모든 경우이므로 개발 중인 브랜치를 의미한다.
  • Builder는 Nexus artifact uploader를 선택한다.

 

Nexus Artifact uploader 부분도 main (또는 master) 브랜치에 대한 설정과 동일하게 입력한다.

Repository만 exe-snapshot-repos로 지정한다.

 

 

빌드 수행 및 배포 결과 확인

빌드 구성을 변경하면 빌드를 수행해서 정상적으로 적용되었는지 확인한다.

 

Jenkins에서 빌드할 프로젝트의 이름을 클릭한다.

 

좌측의 Build with Parameters를 클릭한다.

 

APP_VERSION에 빌드할 버전, BRANCH는 빌드할 소스코드가 있는 브랜치를 선택하고 빌드하기 버튼을 클릭한다.

exe-snapshot-repos 저장소에 저장 되는 것을 확인하기 위해 개발 중인 브랜치를 선택했다.

 

좌측 하단의 #빌드번호를 클릭하여 진행 중인 빌드의 상세 페이지로 이동한다.

 

 

빌드의 상세 페이지에 있는 좌측 Console Output을 클릭하여 빌드 로그를 확인한다.

  • Repository: 부분이 exe-snapshot-repos로 잘 적용되었다.
  • Uploading:, Uploaded: 부분의 URL에 exe-snapshot-repos가 잘 포함되어 있다.

 

Nexus3에서 exe-snapshot-repos에서 확인해보면 업로드가 잘 된 것을 확인할 수 있다.