Back

ubuntu 에서 github 로그인

배포중인 애플리케이션의 변경된 코드를 반영하려면, 인스턴스에 ssh 접속 후 프로젝트 git pull을 받아야한다.
현재 ubuntu를 사용하는데, git pull을 할 때마다 github 로그인을 해야한다.

macOS는 키체인이라는 기능이 있고 여기에 github 토큰을 저장해서 로그인을 안해도 되는데, ubuntu는 이런 기능도 없다.
비밀번호도 아니라 외우지도 못한다. 토큰을 복사해서 붙여넣어 로그인을 한다.

git pull 이후 실행하는 배포 스크립트에는 그저 도커 다시 빌드하고 띄워주는 것만 하고 있다.
스크립트 내부에서 한번에 git pull까지 하면 얼마나 좋을까 생각을했다.

git 옵션을 통해 pull을 함과 동시에 아이디와 토큰을 넣는 방법이 있긴 하다. 그런데 이를 스크립트에 직접 넣자니 형상관리에서 이를 노출 안시키려면 스크립트 파일을 ignore 해야한다.

안그래도 gitignore에 들어가있는 .env는 인스턴스에 직접 SFTP로 옮기기도 하고, DB 접속정보부터 JWT 시크릿키 같이 민감한 것들 다 넣어놨는데, 그냥 깃허브 아이디랑 토큰도 함께 넣으면 되지 않을까?

원래 이 방법을 소개하려고 쓴 글이 아니고,
어쩌다보니 글 작성하다가 방금 위에 생각난 것을 적용하는 것을 시도했다.
검색하다가 스크립트 내부에 .env 파일 불러오는 방법을 알게되었다.

shell script를 잘 몰랐는데 source 라는 저기에 딱 맞는 명령어가 있었다.
형식도 딱 맞아서 .env에 있는 애들이 그대로 변수로 들어가준다.

로컬에서는 문제가 없었는데, 클라우드 인스턴스에서는 이상하게 source 명령어가 동작하지 않아 . 을 사용했다.
(이는 bash, zsh에 내장된 명령어이고 .이 더 보편적인 방법이라고 한다.)

. ./.env

# git pull
echo "=> Git pull..."
git pull https://${GITHUB_ID}:${GITHUB_TOKEN}@github.com/${GITHUB_ORGANIZATION}/${GITHUB_REPO}.git

...

이렇게 하니까 뚝딱 된다.


원래 이 글을 쓰면서 소개하고 싶었던 것은 git-credential-libsecret 라는 것을 사용하는 것이었다.
이것을 사용하면, 한번 github에 로그인을 하면, 더이상 로그인 하지 않아도 된다고 한다.

https://www.softwaredeveloper.blog/git-credential-storage-libsecret

위의 방법을 사용하고 난 이후에는 비밀번호를 입력하는 창을 더이상 캡쳐할 수 없어 캡쳐 시작하고 글부터 작성을 시작했는데, 이상하게도 작성하면서 새로운 방법을 떠올리고 그를 이용하는 방법을 찾은 것 같다.

뭐가 더 좋은 방법인지는 잘 모르겠다.

위에 했던 방법은 해당 인스턴스가 아닌 배포 환경이 바뀌더라도 바로 적용이 가능하다. 단점을 생각했을 때는 .env파일이 노출되면 내 개인 깃허브 아이디와 토큰이 노출되어 안되긴 하는데, 솔직히 저 파일이 노출되면 깃 계정보다는 DB 접속정보가 더 중요한 것 같기도 하다.
그리고 같은 인스턴스에 여러개의 프로젝트를 배포하는 경우 등 무조건 프로젝트들을 처음 clone할 때는 로그인을 해야한다.

아래의 방법은 하나의 인스턴스에 한번이라도 로그인을 하면, 앞으로 해당 인스턴스에 배포할 프로젝트가 변경하거나 여러 프로젝트를 배포하는 경우 등 clone해야할 경우에 더이상 로그인을 하지 않아도 된다.
대신 해당 인스턴스에만 적용이 되어 배포 환경이 바뀌면 다시 설정해줘야 한다.

아무튼 나는 위의 방법을 사용했다.