티스토리 뷰
Photo by Clay Banks on Unsplash
CI/CD는 알지만 CI/CD를 실무에서 써본 적은 없다. GitHub Action을 이용해서 Heroku로 deploy 되도록 해보았다.
1. Local PC에서 코드를 수정하여
2. GitHub repo에 git push를 하면
3. GitHub Action에 설정한대로 Heroku로 자동 deploy 하게 하는 것이다.
즉, 실제로 Heroku에 서비스하고 있다면, 단지 GitHub repo에 push 해주는 것 만으로 변경사항이 서비스에 반영이 되는 것이다. 아래 링크를 참고하여 최소한의 구현과 경로로 전체 구현흐름을 잡아보겠다. 자세한 내용과 선택사항은 링크의 내용을 참고한다.
아래 참고링크에서 제공하는 action을 사용하였지만 그 상세한 동작 매커니즘까지는 들여다보지 않았다.
참고링크: https://github.com/marketplace/actions/deploy-to-heroku
Heroku secret key 구하기
Heroku에는 가입되어 있어야 한다.
먼저 Heroku 사이트에 로그인하여 나의 API Key를 확인하자. 이게 있어야 GitHub에서 나의 Heroku로 접근할 수 있다.
Account Settings 아래에 가보면 API Key를 알아낼 수 있다. 복사해두자.
Go HTTP server를 만들고 GitHub에 올리기
"Hello"를 리턴하는 HTTP server를 만들고 GitHub에 올린다.
내가 하는 프로세스를 요약하면 다음과 같다.
Git
1. 프로젝트 폴더를 만들고 git init
2. .gitignore 파일을 설정한 다음, 코딩
Go Modules and run
1. Go Modules 초기화
go mod init <project name> 을 해준다. ex) $ go mod init github-to-heroku
2. Local PC에서 테스트 해본다.
$ go run .
3. git add 및 git commit
GitHub repo
1. GitHub Cli를 이용해서 GitHub에 remote repo 만들기
2. git push
생성된 GitHub Repo: https://github.com/nicewook/github-to-heroku
참고: GitHub CLI 를 사용한 GitHub Repo 생성 및 push
GitHub Action에게 알려주는 명령
참고 링크 https://github.com/marketplace/actions/deploy-to-heroku
에서는 .github/workflows/main.yml 파일을 만들고 아래와 같이 작성하라고 가이드 되어 있다.
GitHub 에서 제공하는 탬플릿은 아래와 같다.
GitHub repo로 가서 Actions >> New workflow 를 선택하면 나온다
내 프로젝트를 위한 .yml 만들기
위 내용을 참고하여 아래와 같이 만들어 보았다.
1. .yml 파일의 파일명은 중요치 않다. 마찬가지로 .yml 파일 첫 줄의 name 역시 임의로 해도 된다. 나는 myAction.yml, myAction 이라고 각각 이름붙였다.
2. runs-on은 어떤 OS위에서 동작할지를 정한 것이다.ubuntu-lateset. 이후에 GitHub Action은 step에 따라 작업을 수행한다.
3. 코드를 checkout 하고 빌드환경을 설정한 뒤 마침내 빌드한다.
- bin 폴더에 github-to-heroku라는 이름의 실행파일이 생길 것이다.
- 빌드된 실행파일을 Heroku 에서 실행하라고 알려줘야 한다. Procfile의 역할인데 아래에 따로 볼 것이다.
4. 그리고 heroku-deploy 정보이다.
- heroku_api_key
- GitHub repo에서 HEROKU_API_KEY 라고 하여 내 Heroku 계정의 key를 추가한다.
- HEROKU_API_KEY 는 임의의 이름을 쓸 수 있다.
- GitHub Cli를 이용할 수도 있다.
- heroku_app_name
- Heroku 내에 생성된 모든 app들의 이름과 겹치면 안된다.
- heroku_email
- 나의 email 정보를 적는다.
Procfile
.yml 파일이 GitHub Action을 위한거라면 Procfile은 Heroku를 위한 것이다.
무얼 실행할지만 말해주면 된다.
프로젝트 폴더 root에 Procfile을 만들고 그 안에 web: bin/github-to-heroku 라고 써주면 된다.
가자!
이제 git push 만 해주면 Heroku에 app이 생성되고 자동으로 실행된다. GitHub repo로 가서 Actions 탭으로 가보면 진행사항을 확인할 수 있다.
성공후 Heroku로 가보면 github-to-heroku app 이 생성되어 있는 것이 보인다.
오른쪽의 Open app을 눌러보면 브라우저가 실행된다.
Local의 코드를 수정하여 Bye 로 바꾸어 push 해보았더니 제대로 CI/CD가 되며 브라우저로 접근시 바로 적용된 것을 확인하였다.
삽질들
별 것 아닌 삽질들을 여럿 하였다.
1. Procfile에서 web: bin/github-to-heroku 라고 써야 하는데 역슬래시 \를 써서 web: bin\github-to-heroku 라고 써버렸다.
2. HEROKU_API_KEY 와 HEROKU_SECRET_KEY 를 혼용해서 썼다
'golang' 카테고리의 다른 글
SOLID in GO - Open/Closed Priciple (0) | 2021.04.01 |
---|---|
SOLID in GO - Single Responsibility Principle (0) | 2021.03.31 |
Golang - http.Client에 context 패키지를 쓰면 더 좋다 (0) | 2021.03.05 |
Golang - http.Client에는 Timeout이 들어가야 한다. (0) | 2021.03.04 |
코로나 바이러스 확진자 동향 3주간 비교 - Heroku로 서비스하기 (0) | 2021.03.03 |
- Total
- Today
- Yesterday
- 체호프
- 제이펍
- clean agile
- 영화
- 인텔리제이
- 오블완
- 독서
- 티스토리챌린지
- folklore
- Shortcut
- strange
- ChatGPT
- go
- 노션
- Gin
- 잡학툰
- 독서후기
- 2023
- bun
- github
- 클린 애자일
- notion
- solid
- Bug
- agile
- golang
- OpenAI
- API
- intellij
- websocket
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |