[Jenkins] Github Release로 CD 환경 구축하기

이준영·2025년 12월 23일

저번에는 GitHub Pull Requests를 보내면 자동으로 빌드되는 CI환경을 구축했으니, 이번에는 Github에 자동으로 완성된 게임이 올라가는 환경을 구축해보려고 한다.

Github Release

GitHub Release:

  • 개발자가 작성한 코드의 특정 시점(버전)을 기록하고, 사용자에게 완성된 결과물(빌드 파일, 실행 파일 등)을 배포하기 위해 제공되는 전용 공간.

  • 단순히 소스 코드를 저장하는 것을 넘어, 소프트웨어 배포에 최적화된 여러 기능을 제공.

구현 중 발견한 문제점

  • Jenkins 관리 -> Plugins -> Available plugins -> Github Release Plugin 설치
설치된 모습
  • 이렇게 추가 후, 현재 진행 중인 프로젝트에서 빌드 후 조치 섹션에서 Github Release를 찾아야 했는데 보이지 않았다.
Github Release 없음
  • Jenkins 재시작, 다운그레이드 등을 시도해 봐도 안보여서 공식 문서를 찾아 보았다.

  • 공식 문서 : Jenkins Release

  • 공식 문서를 읽어보면 Pipeline 프로젝트에 대한 사용법만 나와있는데, 나는 현재 프로젝트를 FreeStyle로 구성했기 때문에 생긴 문제인 듯 했다.

우회 방법

  • 그래도 Github에 꼭 올리고 싶어서 방법을 찾아보니, Github CLI를 이용해서 올리는 방법을 찾아서 사용해보기로 했다.

Github CLI 설치

  • 현재 나는 Github Desktop을 사용중이기 때문에, Github CLI 버전 설치가 필요했다.

  • 해당 Github를 설치하면 Windows Cmd 환경에서 Github의 기능을 사용할 수 있다.

Github CLI
  • 설치 후, cmd에서 gh --version를 쳐서 잘 설치 되었는지 확인.
버전 확인
  • 이후, Jenkins도 재시작 해준다.
Jenkins 재시작

권한 설정

  • Jenkins -> 내 프로젝트 -> 구성 -> Environment 섹션 -> Use secret text(s) or file(s)?을 선택해준다.

  • 이 설정은 나중에 Github CLI를 통해서 명령어를 입력할 때, 권한을 넣어주는 역할을 할 것이다.

Use secret text(s) or file(s)?
  • Variable은 GH_TOKEN으로 설정(이렇게 해야 나중에 Cmd에서 자동으로 인식)

  • Credentials은 저번에 Jenkins Credentials 설정에서 만든 권한을 넣어준다.

명령어 작성

  • Jenkins -> 내 프로젝트 -> 구성 -> Build Steps -> + Add build step -> Execute Windows batch command를 선택한다.
코드
:: 환경 변수 설정
set BUILD_DIR=C:\Jenkins\workspace\ColorPuzzle\Builds\MyGame
set ZIP_NAME=ColorPuzzle.zip
set TAG_NAME=latest

:: 파일 압축
cd /d %BUILD_DIR%
powershell Compress-Archive -Path * -DestinationPath ..\%ZIP_NAME% -Force

:: 이전 폴더로 이동
cd ..

:: latest tag 삭제
gh release delete %TAG_NAME% -y --cleanup-tag

:: latest tag 생성
gh release create %TAG_NAME% %ZIP_NAME% --title "Latest Build (#%BUILD_NUMBER%)" --generate-notes
  • 마지막 명령어에 대해 추가 설명을 하면,

  • BUILD_NUMBER는 Jenkins에 빌드한 번호.

  • --generate-notes는

패치 노트
  • 이렇게 패치 노트 처럼 내가 PR에 적은 내용이 적힌다.

완성된 주소

CD 환경 구축
  • 이렇게 성공적으로 CD 환경을 구축하였다.

  • 굳이 Zip 파일로 베포를 한 이유는 나중에 Setup 파일을 올릴 때와 상황이 비슷하기 때문에 Zip 파일로 연습을 해봤다.

  • 다음 프로젝트는 Pipeline으로 만들어서 다운받은 플러그인을 활용할 수 있게 고민해봐겠다.

profile
게임 개발자가 되기 위해서 공부하는 중입니다.

0개의 댓글