15분만에 GitHub Actions 로 Google App Engine에 배포하기

ted
None
Published in
9 min readApr 13, 2021

GitHub Actions 를 사용해서 CD(continuous deployment/delivery) 하는것을 차근차근 해보아요 :)

안녕하세요. 휴먼스케이프 ted 입니다.

오늘은 GitHub Actions를 활용해서 Google App Engine에 배포(Deploy)하는 것을 해보려고 합니다.

GitHub Actions?

GitHub에서 제공하는 workflow 자동화 툴로 빌드, 테스트, 배포 등의 CI/CD 를 해줄 수 있도록 도와주는 기능입니다.

이게 없던 시절에는 jenkins 를 쓰거나 circleCI 를 쓰는 등의 별도의 서버를 구축하곤 했는데요. 이제는 별도로 구축하지 않고도 편리하게 프로젝트마다 자동화 할 수 있는 이점이 있습니다. 뿐만 아니라 배포하는 과정이 일종의 가상화된 쉘 환경을 제공하기 때문에 배포 이외에도 commit이나 push, issue에 대한 이벤트를 받아서 새로운 작업을 하는 사례들도 종종 있습니다.

CI/CD 구축에 드는 시간과 비용도 절약하고, 잘 만들어두기만 하면 배포의 부담을 덜 수 있습니다. 배포에 쓰는 시간을 절약하고 자동화 할 수 있게 되면 개발할때 코드에만 집중할 수 있어서 많은 도움이 됩니다.

한번 써볼까요~?

GitHub Actions 시작하기

먼저 레포지토리를 새로 만들거나, 배포를 할 레포지토리를 선택합니다.

만약 app engine 을 처음시작한다면 아래 링크를 참고해서 시작해주세요! https://codelabs.developers.google.com/codelabs/cloud-app-engine-python3

여기서 Actions 를 눌러 주시면 다음과 같이 미리 정의된 workflow 들을 볼 수 있습니다.

여기서 따로 완전히 customize된 workflow를 만들수도 있어요. 하지만 이번에는 처음 만들어 보는것이기 때문에 다음 링크를 통해 미리 정의된 것을 검색해 보도록 하겠습니다.

Github Actions Workflow 써보기

위의 Github Marketplace에서 우리가 원하는 것을 검색해 봅시다!

‘app engine’을 검색한 결과는 아래와 같습니다.

2021년 4월 12일 기준으로 10개정도의 관련된 workflow가 있는것을 확인해 볼 수 있습니다. 위의 것을 사용할 수도 있고, 아예 새로 만들 수도 있습니다.

하지만 시간을 절약하기 위해서 Star 가 많은것을 믿고 “Publish app to Google App Engine by zxyle” 으로 진행해보겠습니다.

사용법은 편해서 Use lastest version 을 선택하면 아래와 같이 나옵니다.

처음에는 ??? 이랬는데 차근차근 함께 진행하면 됩니다. :)

뭔가 다운로드를 할 필요는 없구요, 저 부분을 우리가 추가할 yml 파일에 넣을 것입니다 :)

Actions Workflow 추가 (맛보기)

이제 actions 코드를 추가해보겠습니다.

다시 actions 화면으로 돌아와서 [set up a workflow yourself -> ]를 눌러줍니다.

그러면 아래 처럼 코드가 나오게 되는데 이 코드 위에 저희가 쓰기로 한 publish-gae-action를 넣어보겠습니다.

위 코드에 주석이 잘 나와있어서 한줄 한줄 이해해보셔도 좋지만

먼저 input을 입력하고 진행하는게 좋으므로 나중에 코드를 입력하도록 할 예정입니다 :)

input + secret 추가하기

입력에 들어가는 값들이 중요한 키값과 같은 값들이 많습니다.

이들이 코드에 들어가면 보안적인 리스크가 생기므로, 이 값들은 코드가 아닌 레포지토리의 secret에 추가해야합니다.

레포지토리에 Settings -> Secrets 로 가서 우선 필요한 파라미터들을 추가 합니다.

각각 필요 한 것들은

  • 프로젝트 아이디
  • 서비스 키
  • 이메일 주소

가 필요합니다.

프로젝트 아이디

프로젝트 아이디는 말 그대로 프로젝트 선택창에 나오는 아이디입니다.

이 값이 PROJECT_ID 가 됩니다.

서비스 키

서비스 키는 다음 주소를 통해 접속하여(계정이 본인것이 맞는지, 프로젝트가 해당 프로젝트인지 꼭 확인 필요!) 확인합니다.

https://console.cloud.google.com/apis/library/cloudresourcemanager.googleapis.com?project=자신의 프로젝트 이름

위의 [사용]을 누르시면

이렇게 Cloud Resource manager로 이동하게 됩니다. [사용자 인증 정보 만들기]를 누르셔서 계정을 만들어야 합니다.

이때 [Service Management API] 를 선택한 뒤에 [아니요, 사용하지 않습니다] 를 눌러주세요.

그 뒤에 [어떤 사용자 인증 정보가 필요한가요?] 를 눌러서 다음으로 넘어갑니다.

서비스 계정 추가 부분이 나오는데 여기서 아래 처럼 App Engine 배포자 역할이 있는 서비스 계정을 만들어 줍니다.

여기서 잠깐!

역할은 아래 링크에서 보시고 더 추가하실수도 있습니다. 배포 환경마다 역할들이 다양하기 때문에 다음 링크를 보시고 역할들을 추가해주세요!

대표적으로 다음과 같은 권한들이 필요합니다.

  • roles/appengine.deployer (저는 나중에 split 이 안되어서 결국에 roles/appengine.appAdmin 권한을 주었습니다.)
  • roles/iam.serviceAccountUse
  • roles/compute.storageAdmin
  • roles/cloudbuild.builds.editor

위 권한으로 추가되어야 gcloud app deploy와 동일한 동작을 할 수 있습니다.

다른 권한은 다음 링크들을 참고해주세요 :)

https://cloud.google.com/appengine/docs/flexible/python/roles?hl=ko

https://cloud.google.com/iam/docs/understanding-roles?hl=ko#cloud-storage-roles

그 뒤에 [계속] 을 누르시면 인증 파일이 다운로드 됩니다.

해당 파일에 가서 쉘에서 키를 다운로드 받은 곳으로 가서 아래 처럼 입력해줍니다.

$ cat [본인의 키].json | base64

여기서 나온 base64 가 GCP_SA_KEY 가 됩니다.

이메일 주소

github 계정 주소가 아니라 구글 app engine에서 발급받은 키의 서비스계정ID 이메일주소입니다.

이 값이 GCP_SA_EMAIL 이 됩니다.

모두 입력을 했다면 아래와 같이 뜰것입니다.

Github Actions 에 Workflow 추가

위 workflow에서 코드를 이해하여 저희에게 알맞는 코드를 입력해줍니다.

급하시면 아래 코드를 복/붙하셔도 좋습니다.

위 코드를 커밋하면 자동으로 actions가 돌아가게 됩니다. :)

성공하였다면 다음과 같이 작동되는것을 볼 수 있습니다.

만약 성공하지 않았다면 build를 누르고 어떤 에러인지 확인해야합니다.
(보통은 권한 에러거나, app.yaml 이 없거나, app engine프로젝트가 아니어서 생기곤 합니다.)

줄이며

오늘은 간단하지만 간단하지 않았던 Github Actions로 Google App Engine 배포에 대해 알아 보았습니다.

한번에 여러 개념들이 나와서 다소 어려울 수 있지만,

차근차근 진행해 보면 금방 잘 작동하는 것을 볼 수 있습니다.

부족한 부분은 코멘트 주시면 보충하거나 새롭게 찾아뵙도록 하겠습니다 :)

Walk with us!

기술이 세상을 더 아름답게 할 수 있다고 믿으신다면, 휴먼스케이프와 함께 소중한 뜻을 펼칠 수 있습니다.
함께 걸어가며 성장하실 분, 언제든지 연락해주세요 :)

휴먼스케이프 개발자 채용공고 보러가기

--

--