티스토리 뷰
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
* 여기서는 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 이 변경되는 것을 알 수 있다. |
'golang' 카테고리의 다른 글
NoSQL 을 쓰는 이유 (0) | 2020.08.20 |
---|---|
go 동시성 패턴: or-done-channel 정리 (0) | 2020.07.30 |
Rob Pike의 The Laws of Reflection 블로그 포스팅 분석 (0) | 2020.02.28 |
Russ Cox 의 Interface 블로그 포스팅 분석 (0) | 2020.02.26 |
비밀번호 안전보관: bcrypt 를 알아보자 (2) | 2020.01.28 |
- Total
- Today
- Yesterday
- 영화
- 노션
- Shortcut
- pool
- golang
- 2023
- intellij
- 인텔리제이
- github
- Bug
- Gin
- postgres
- 독서후기
- websocket
- strange
- 잡학툰
- notion
- 제이펍
- API
- folklore
- agile
- go
- JIRA
- ChatGPT
- OpenAI
- bun
- 독서
- solid
- 체호프
- 클린 애자일
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |