안녕하세요. 이번에는 CircleCI에서 Private Repository에 접근하는 방법을 정리하겠습니다.
에러 내용
Submodule 'SHLibrary' (https://github.com/abcd/efgh.git) registered for path 'efgh'
Cloning into '/home/circleci/project/efgh'...
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
fatal: clone of 'https://github.com/aaaa/efgh.git' into submodule path '/home/circleci/project/efgh' failed
Failed to clone 'efgh'. Retry scheduled
Cloning into '/home/circleci/project/efgh'...
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists. fatal: clone of 'https://github.com/abcd/efgh.git' into submodule path '/home/circleci/project/efgh' failed Failed to clone 'efgh' a second time, aborting Exited with code exit status 1
CircleCI received exit code 1
먼저, 에러가 발생한 배경을 설명하면, 서브모듈은 Private Repository였고 Private Repository인 서브모듈을 CI 서버에서 Sync를 해주는 과정에서 에러가 발생했습니다.
일단 당연히 CI서버인 CircleCI에서도 빌드를 해주려면 서브모듈을 이용하는 프로젝트를 CI서버에도 모듈을 Clone을 해주어야 Build 할 수 있습니다.
하지만, CircleCI에서 서브모듈이 Private Repository이므로 접근을 하지 못하므로 에러가 발생한 것이었습니다.
접근을 허용하기 위해서 CI서버에 원격으로 저의 권한을 인증하는 가장 좋은 방법은 SSH 방식입니다.
그리고 CircleCI에서는 SSH 인증하는 방법을 CircleCI Project Settings에서 인증하는 방법과 프로젝트의 Script 단에서 인증하는 방법으로 나누어 User Key
와 Deploy Key
를 이용하는 두 가지 방법을 제공합니다.
User Key를 이용한 방법
1. SSH Key를 발행하고 싶은 Repository의 ProjectSettings을 들어가줍니다.
2. SSHKey 탭에 들어갑니다.
3. Authorize with Github를 선택합니다.
4. Authorize circleci를 선택합니다.
그러면, User Key가 등록된 것을 확인하실 수 있습니다.
후에, 빌드를 다시 돌려보면 Build Success 한 것을 확인할 수 있습니다.
마찬가지로, 깃허브에서도 SSH Key가 사용된 것을 확인할 수 있습니다.
Deploy Key를 이용한 방법
User Key를 발급하던 방식과 마찬가지로 Deploy Key를 발급합니다.
version: 2
jobs:
deploy-job:
steps:
- checkout
- add_ssh_keys:
fingerprints:
- "SO:ME:FIN:G:ER:PR:IN:T"
steps에 add_ssh_keys의 fingerprints에 deploy key를 추가하면 마찬가지로 CircleCi에서 Private Repository의 레포지토리에 접근할 수 있습니다.
감사합니다!
참고자료:
Private Repository에 Checkout 하는 것에 대한 CircleCi Document
User Key에 대한 Document
https://circleci.com/docs/2.0/gh-bb-integration/#user-key-security
add SSH Key Document
https://circleci.com/docs/2.0/add-ssh-key/