티스토리 뷰

Photo by Sneaky Elbow on Unsplash


개요

 

프로그램의 버전관리를 하더라도 프로그램 실행시의 로그에

프로그램 build 시의 정보가 담겨있으면 좀더 정확하게 어느 시점의 code , 언제 build 녀석인지를 알아낼 있을 것이다.

 

go build 에서  제공하는 -ldflags 옵션을 이용하여

1) git commit 날짜와 commit hash

2) go build binary 생성한 날짜를

binary 실행시의 로그에 추가해보자

 

이를 참고로 하여, 다양하고 유용한 정보를 담을 있을 것이다.

 

실행예제 GitHub: https://github.com/nicewook/ldflags

참고 링크: https://www.digitalocean.com/community/tutorials/using-ldflags-to-set-version-information-for-go-applications

* 여기서는 make 사용하였음: https://jusths.tistory.com/130


* 최근 스터디 모임에서 박준용님의 발표에서 기능을 확인하고 실제 프로젝트에 적용하였습니다.

아래는 박준용님 Blog/GitHub (Special thanks!)

- Blog: https://www.hillfolk.org/

- GitHub (관련 Dockerfile): https://github.com/hillfolk/go-rest-api-template/blob/master/Dockerfile 

 

Makefile

 

 우선 원하는 문자열을 생성해준다.

 

$(eval GIT_INFO=$(shell git show --pretty=format:%cs --no-patch)-$(shell git show --pretty=format:%h --no-patch))

$(eval DATE=$(shell echo %date% %time%))

 

이렇게 얻어낸 문자열인 GIT_INFO, DATE go build 시에 적용해본다.

여기서 main.GitInfo, main.BuildTime 주목하자

 

$(GO) build -v -a -ldflags="-X 'main.GitInfo=$(GIT_INFO)' -X 'main.BuildTime=$(DATE)'"

 

main.go

 

이제 go build -ldflags 옵션이 실제 코드와 어떻게 연동되는지를 보자

 

전역변수로 GitInfo, BuildTime 선언하고 초기값을 넣어주었다.

이것이 위에서 주목하자고 main.GitInfo, main.BuildTime 정체이다.

 

package main GitInfo, BuildTime 이라는 변수를 가리키는 것이다.

변수들에게 command line 에서 생성해둔 GIT_INFO, DATE 라는 문자열을 대입하라는 것이다.

 

$(GO) build -v -a -ldflags="-X 'main.GitInfo=$(GIT_INFO)' -X 'main.BuildTime=$(DATE)'"

 

결과 확인

 

1) git log --oneline 으로 현재 build 하려는 code 가리키는 위치를 확인해본다

- git hash 2bdc86f 시작하는 것을 있다.

 

2) make 해보면 makefile 에서 정의해둔대로 GIT_INFO DATE 만들어져서 -ldflags 적용된다.

 

3) binary ldflags.exe 실행해보면 git commit 정보와 build 날짜가 출력된다.

4) make 한번 하면 build date, time 변경되는 것을 있다


댓글
댓글쓰기 폼
공지사항
Total
171,404
Today
0
Yesterday
245
링크
TAG
more
«   2020/08   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함