git 자동처리안
git에서 어떤 엑션이 일어나면, 그 이벤트를 처리하게 하는 방법으로 크게 3가지 방법이 있는 것 같습니다.
- githooks
- webhook
- CI runner
githooks
기본적으로 개발자의 환경에서 git commit
이라던지, git push
등을 수행할 때의 이벤트를 처리하게 하는 방법입니다. .git 디렉토리 안에 Hooks 디렉토리게 있는데 이 안에 스크립트 파일을 만들어 두는 방법입니다.
webhook
github이나 gitlab등에 merge등이 발생했을 때, 어떤 url을 실행하도록 설정할 수 있습니다. API라면 powershell의 podeserver등을 사용하여 만드는 방법도 있습니다.
CI runner
webhook는 github이나 gitlab서버가 알 수 있는 (접근할 수 있는) endpoint가 필요합니다만, API를 만들기가 곤란한 경우, 또는 굉장히 복잡한 처리를 해야하는 경우에는 해당 repository가 제공하는 runner를 실행함으로써 이벤트 수행을 할 수 있습니다.
벤더 고유의 매우 세부적인 설정작업이 필요하므로 자주 사용하지는 않지만, git과 연동하는 고급 서비스를 만든다면 이를 활용해야 할 것 같습니다.
githooks
.git 디렉토리 아래에는 Hooks 라는 디렉토리가 있는데, 특정 action이 수행된 다음에 실행되는 스크립트 파일들이 있습니다. 이를 이용하여 여러가지 액션을 연동시키는 것이 가능한데, 가장 기본적으로든
- python에서 80컬럼까지만 사용하는 python언어의 경우 포맷을 맞추게 한다던지,
- 스크립트파일의 경우 error가 있는 지 검사한다거나,
- push한 후에 어떤 api를 호출한다던지
하는 것들이 있습니다.
제게도 한동안 githooks와 연동하여 Lint나 Syntax Error를 검사하곤 하다가도, IDE를 연동해 사용하면 중복되거나, 충돌하는 경우가 있어서 또 사용하지 않다가 하곤 했습니다.
이번 포스트는 powershell의 PSScriptAnalyzer를 이용해서 commit하기 전에 변경된 파일들을 검사하도록 합니다.
githooks 스크립트는 .git 의 아래에 존재하기 때문에, 커밋할 수가 없기 때문에, 이 설정을 사용하도록 강제하는 것이 불가능합니다. 따로 wiki라던지 방법을 공유해 각자 설정하도록 하는 것이 우선은 최선인 것 같습니다. (모두 같은 IDE를 사용하지 않는 한.)
윈도우즈에서 hooks 디렉토리의 내용은 다음과 같습니다.
이중에 이번 포스트에서 작업할 것은 두가지, 다음 파일입니다.
- pre-commit
- pre-commit.ps1
pre-commit
파일의 내용은 다음과 같습니다.
#!/bin/sh
c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -Command '.git\hooks\pre-commit.ps1'
- shebang의 인터프리터가 정확한 path가 아니더라도 작동합니다.
- linux의 pwsh이라면 경로를 수정하시면 됩니다.
pre-commit.ps1
기본적인 아이디어는 변경된 파일을 찾아서 검사하도록 합니다. 만일 문제가 있다면 exit 1
을 함으로써 commit동작을 중지 시킵니다.
|
|
-Severity Error
를 붙이는 것은 문법에러만 표시하기 위해서 입니다. Write-Host가 경고를 내도록 되어 있어서 이를 회피하는 방법을 찾고 있었습니다만, 가장 손쉬운 솔루션은 이 옵션을 사용하는 것이었습니다.
시험삼아서 하나의 파일을 commit 해보도록 합니다.
test.ps1
|
|
커밋하면 다음과 같이 powershell script가 실행된 것을 확인할 수 있습니다.
기타 활용안
- headless CMS인 hugo를 사용한다면, md파일을 push하고 난 뒤에 통계치를 보이도록 하는 것도 좋은 이아디어라고 생각합니다.