[Jenkins] 파워쉘을 이용해서 git log 관리하기

728x90
반응형

 

 

2020/06/08 - [PowerShell] - [PowerShell] - 파워쉘을 이용할때 한글깨짐현상 해결방법

 

이전 글에서, 파워쉘을 이용할 때 한글 깨짐 현상에 대해서 해결 방안을 포스팅 한적이 있습니다. 

이와 연계되는 작업으로, 저희 프로젝트는 MSBuild를 이용하고 있고, 대부분 윈도우즈 환경에서 개발이 이루어 지고 있어서, Jenkins를 Windows 버전으로 설치를 했었습니다. 

 

하나의 프로젝트에 여러 개발자분들이 같이 작업을 진행하고 있다보니, git push 과정에서 간혹 업무에 대한 공유를 누락하는 경우가 발생하는데요. 

git log 와 Powershell 그리고 자체적으로 구축되어 있는 사내 알림망을 이용해서 

git push 를 진행하면 gitlab에서 WebHook 기능을 이용해서 알림을 자동으로 보낼수 있는 시스템을 구축해놓았습니다. 

 

이번 포스팅에서는 PowerShell을 이용해서 git history를 추출하고, 

Web Api를 호출하는 과정에 대해서 간략하게 정리하려고 합니다.

 


1. Jenkins PowerShell 추가

빌드시에 추가적인 행위를 Jenkins에 추가하였습니다. 

Add build step 를 누르게 되면, 하단에 PowerShell 부분이 보이게 되며, 만약 안보이시는 분들은 Plugin 관리에서 추가하시면 됩니다. 

 


2. git history 추출 후 저장

$LAST_COMMIT=(git log -1 --pretty=format:"%H")
$HEAD=Get-Content last.git
$MSG=(git log -10 --pretty=format:"%an - [%h] %s\n" "$HEAD...HEAD")

파워쉘을 이용하면, 스크립트에서 나온 값들을 $ 기호를 이용한 변수에 기록할 수 가 있습니다. 

위 구문에 대한 설명을 드리면, 

 

$LAST_COMMIT 변수에는 git log 중 마지막 hash 값을 저장하고 있습니다.

 

$HEAD 변수에는 Get-Content 라는 PowerShell 명령을 이용해서 last.git 파일에 있는 값을 가져와서 저장하도록 했습니다. 

 

$MSG 변수에는 git log 중 10개에 대한 메지지를 기록했으며, $HEAD 변수를 이용해서 마지막 해쉬값을 기준으로 10개를 가져오도록 했습니다. 

 

 


3. Web API 호출

Invoke-WebRequest "http://000.000.000.000/api/Alarm/Send/Send?Contents=$MSG"

이어지는 PowerShell 구문으로 Invoke-WebRequest 명령어를 이용해서 Web API를 호출 할 수 있습니다. 

 


4. 마지막 HEAD 값 저장

Set-Content -Value $LAST_COMMIT -Path last.git

위에서 $HEAD 변수를 이용해서 마지막 해쉬값을 이용해서 log를 가져왔었는데요.

이때 마지막 HASH 값을 Set-Content 명령어를 이용해서 last.git 파일에 저장하는 명령어를 입력합니다.

 

 


 

5. 완성본

[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$env:LC_ALL='C.UTF-8'

$LAST_COMMIT=(git log -1 --pretty=format:"%H")
$HEAD=Get-Content last.git
$MSG=(git log -10 --pretty=format:"%an - [%h] %s\n" "$HEAD...HEAD")

Invoke-WebRequest "http://000.000.000.000/api/Alarm/Send/Send?Contents=$MSG"

Set-Content -Value $LAST_COMMIT -Path last.git

 

 

위 과정으로 진행하게 되면, 

Jenkins에서 빌드가 동작할 경우, git 로그를 조회해서  Web API를 호출하는 과정이 자동으로 동작하게 됩니다. 

팀원들 간에 git push가 이뤄져도, 어느 시점에 누가 push를 했는지 공유가 되어 유용하게 사용 할 수 있습니다. 

 

 

728x90