-
Notifications
You must be signed in to change notification settings - Fork 2
cicleci 스크립트에서 gcp 인증을 받기 위한 환경 변수 설정
workflow에는 gcp CLI를 좀 더 쉽게 사용하기 위하여 circleci/gcp-cli@2.4.0 orbs
를 사용하고 있습니다. 이 orbs는 기본적인 작업들을 미리 구현해 놓고 파라미터를 전달 받아 원하는 동작을 하는 명령들을 집합니다. 저희가 개발할 때 이미 원하는 기능이 구현 된 라이브러리를 가져다 쓰는데 그런 개념이라고 보시면 될 것 같습니다.
gcp orbs에는 gcp 프로젝트에 접근 하기 위한 서비스 키와 프로젝트와 관련된 정보들을 사용하기위해 환경 변수를 정의 하고 있습니다. 물론 파라미터도로 직접 전달 해도 되지만 파이프라인 스크립트는 깃에서 버전 관리가 되고 이런 정보는 노출시키지 않는 것이 중요하므로 환경 변수를 사용 합니다. 팀 단위로 운영이 되면 circleci에서 gcp CLI를 사용하기 위해 인증 정보는 한 번만 업데이트 하면 되지만 현재 무료 계정을 사용하고 있으므로 리소스가 제한되기 때문에 각자의 계정에서 별도의 설정이 필요합니다.
circleci는 환경변수를 관리하고 공유하기 위해 context를 제공합니다. global 환경 변수를 지정 할 수 있지만 관련 있는 변수를 모아 context로 관리하는 것이 좋습니다.
- orbs를 사용 하려면 서비스 접근을 위한 key를 가져와야 합니다. 프로젝트를 생성한 후 gcp 콘솔에서 서비스 키를 생성하기 위해 명령어를 입력 합니다
- service-account-name는 6~30이내의 문자열이라면 아무거나 상관 없습니다.
- project-id는 생성된 프로젝트의 id여야 합니다.
- 학습을 위한 계정이므로 권한은 owner라고 해 줍니다. 실제 프로젝트에는 접근 역활 별로 계정을 나누는게 좋습니다.
$ gcloud config set project <<project-id>>
$ gcloud iam service-accounts create <<service-account-name>> \
--display-name <<service-account-name>>
$ gcloud iam service-accounts keys create ~/key.json \
--iam-account <<service-account-name>>@<<project-id>>.iam.gserviceaccount.com
$ gcloud projects add-iam-policy-binding <<project-id>> \
--member "serviceAccount:<<service-account-name>>@<<project-id>>.iam.gserviceaccount.com" \
--role "roles/owner"
--role "roles/storage.admin"
--role "roles/container.admin"
- 로컬에 다운 받아진 key.json 파일을 base64 방식으로 인코딩 합니다. 여기서 출력된 문자열은 잘 저장해 둡니다. 아래에서 GCLOUD_SERVICE_KEY_BASE64 환경 변수의 값이 됩니다.
$ cat ~/key.json | base64
-
왼쪽에 위치한 사이드 바에서 Organizion Settings링크를 클릭하여 설정 페이지로 이동합니다.
-
Context 매뉴에서 아래와 같이 create context버튼이 보이면 클릭합니다. 이 후 context의 이름을 받는 팝업창이 뜨는데
gcp-auth-context
라고 입력해 주시면 됩니다.
- context 생성이 완료되면 다음 화면으로 리다이렉션 되는데 context 이름을 클릭하면 환경 변수를 추가 할 수 있습니다. 추가 되는 gcp service key의 이름은
GCLOUD_SERVICE_KEY_BASE64
라고 입력 해주셔야 하며 값은 위에서 base64로 인코딩 했던 서비스 키값이 됩니다. 이것은 파이프라인 스크립트에 의해 json파일로 다시 복원되고 GCLOUD_SERVICE_KEY 환경 변수로 변환되어 obrs에서 로 변환되어 사용됩니다.
- 환경 변수 설정이 끝난 모습 입니다. 변수명은 동일 하게 설정 되어야 합니다.