PowerShell
-
[Jenkins] 파워쉘을 이용해서 git log 관리하기2020.07.02
[Jenkins] 파워쉘을 이용해서 git log 관리하기
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를 했는지 공유가 되어 유용하게 사용 할 수 있습니다.
'CI' 카테고리의 다른 글
[Jenkins] 매개변수를 이용한 Git Tag 빌드 (0) | 2023.01.11 |
---|---|
[Jenkins] Git Branch 매개변수를 이용한 빌드 (0) | 2020.07.14 |
[MSBuild] MSBuild 웹 URL 호출 - MSBuild.Extension.Pack (1) | 2020.01.07 |
[Jenkins] Gitlab 연동 및 Build셋팅 (0) | 2019.12.11 |
[Jenkins] 젠킨스 MSBuild 셋팅 (0) | 2019.12.10 |
[PowerShell] - 파워쉘을 이용할때 한글깨짐현상 해결방법
PowerShell 을 이용해서 Git 로그를 알아오기 위한 명령어를 실행 중, 한글이 깨지는 현상이 발견되었습니다.
인터넷을 찾아보니, 빈번하게 발생하는 부분인거 같아서 정리해보았습니다.
1. 출력에 따른 UTF-8 설정
웹 서핑 결과 아래의 명령을 PowerShell 에 입력하면, 한글 출력이 가능하다고 하여, 설정해 봤습니다.
$env:LC_ALL='C.UTF-8'
그 결과 위 화면 처럼 보여지네요.
하지만 위 내용은 매번 PowerShell을 실행 했을 경우, 재 입력을 해줘야 하는 불편함이 있습니다.
또한 ISE 환경에서는 적용이 안되는 불편함도 있고요.
2. PowerShell 실행시, 자동 적용
PowerShell 이 항상 실행될 때, 해당 명령이 실행되도록 하고 싶다면,
$profile 명령어를 사용해서 나오는 경로의 ps1 파일에 위 내용을 입력해 놓으면 됩니다.
만약 파일이 없다면, 같은 이름으로 생성해주셔도 됩니다.
위 내용을 ps1 파일에 기입해 놓으면, PowerShell 을 실행시킬때마다, 자동으로 등록이 된다고 합니다.
3. 변수 이용시 한글 깨짐
하지만, 위 방법을 적용했지만,
문제가 발생하였습니다. 다른 포스트에서도 내용을 다루겠지만,
PowerShell의 변수에 git log 명령으로 나온 Text를 담게 되면, 여전히 Text는 깨지는 현상이 발생하였습니다.
해결방안
[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8
PowerShell은 출력시에 인코딩 값이 기본적으로 정해져 있다고 합니다.
위와 같이 ps1 파일 혹은 Jenkins의 PowerShell 실행시 제일 먼저 위 내용을 실행 시켜 주면,
변수에 담은 내용도, 한글이 깨지지 않습니다.
'PowerShell, CMD' 카테고리의 다른 글
[PowerShell] 파워쉘 다운로드 및 업그레이드, 폰트변경 (1) | 2022.02.05 |
---|---|
[CMD] taskkill batch script 프로세스 체크 방법 (0) | 2021.08.23 |
[PowerShell] Invoke-WebRequest 를 이용한 웹호출 POST,GET (0) | 2021.06.21 |
[PowerShell] 파워쉘 ps1 파일 실행 권한 변경 (0) | 2021.05.18 |
[PowerShell] SVN Log Pretty 포맷 만들기 (0) | 2021.05.14 |