Menu

메모용 개발 블로그

전체보기 > 개발일기 >

정적 블로그 - GitLab Runner, 도커로 자동 배포

2022-12-21 15:20:30

왜 하게 되었나?

기존에는 GitLab Runner를 Shell을 통하여 구동하고 있었다.

그러나 쉘에서 블로그 페이지 생성 작업과 배포를 수행을 위해서 node.js나 git 등의 환경이 필요하고 이는 만약 환경이 변경되면 다시 세팅을 해주어야 하는 번거로움이 있다.

이러한 것을 손쉽게 해결해줄 방안에는 docker가 있다. 이미 공개된 이미지들을 활용하면 백업본만 살아있다면 OS가 통째로 날아가도 깃랩과 도커만 세팅해주면 바로 사용할 수 있을 것이다.

OS환경에 대한 의존성을 조금 덜어내고자 변경을 수행하였고, 그 과정에서 발생하는 문제점들을 수정해보고자 한다.

git push 방식 선정 (SSH)

GitHub Page 저장소를 Pull 받아오는 것은 애초에 Public 저장소이므로 큰 문제가 안되나, Push할 경우에 문제가 발생한다.

현재 GitHub의 보안 정책상 https 프로토콜로 push를 할 시 비밀번호나 토큰을 URL에 넣어서 Push는 할 수 없어서 해당 프로토콜을 제외하였다.

그러면 SSH 프로토콜로 Push하는 것으로 수정하고, 이 경우 비밀번호를 CI/CD 과정 중에 사용하는 것 보다는 해당 저장소 한정으로 권한을 허가 가능하도록 키를 이용하는 방식이 적절하다고 생각되어 이러한 방향으로 작업하게 되었다.

이슈 정리

이슈 1 - 키 등록

배포시 키와 같은 정보는 GitLab CI/CD 변수 부분을 사용해주도록 하였습니다. 또한 Mask 처리를 하기 위해서 키의 개행 등 비알파벳/숫자를 제거하기 위해서 base64로 인코딩 후 CI/CD 동작 시 디코딩하여 파일에 쓰도록 하였습니다.

image-20221222000559179

위 사진은 GitLab Variable 메뉴에 변수를 등록한 모습입니다.

이 경우 키와 키 폴더를 임의로 생성하기에 ssh-keygen 프로그램으로 생성 시 알아서 해줬던 권한 설정은 수작업으로 꼭 해주어야 합니다.

그렇지 않을 경우 적절하지 않은 권한의 키라면서 오류를 뱉게 됩니다.

mkdir ~/.ssh
chmod 700 ~/.ssh
echo $GITHUB_DEPLOY_SSH_PRIVATE_KEY | base64 --decode >~/.ssh/id_ed25519
chmod 700 ~/.ssh/id_ed25519

위 커맨드에서 GITHUB_DEPLOY_SSH_PRIVATE_KEY는 변수명 입니다.

이슈 2 - 키 검사 무시 StrictHost KeyChacking 끄기

가끔 SSH로 접속하고자 하는 서버가 변경한 경우 중간에 누군가 요청을 가로 챘을 수 있다면서 경고하는 문구를 볼 수 있습니다.

중간자 공격을 막기 위함인데. 이러한 것을 무시해줘야 합니다. 항상 새로운 환경에서 같은 키를 가지고 요청을 보내기 때문에 .ssh/config 파일에 아래 내용을 추가합니다.

Host *
	StrictHostKeyChecking no

위 내용은 아래처럼 명령어를 통해서 생성하도록 하였습니다.

echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

이슈 3 - known_hosts 등록

처음 연결하는 대상 서버로 연결 시 핑거 프린트를 등록하겠냐는 yes/no 입력이 나타나는데.

이 경우 CI/CD 실행 중 진행할 수 없으므로 러너 구동이 실패처리 됩니다.

미리 github의 정보를 받아와서 known_hosts에 등록해줘야 합니다.

ssh-keyscan github.com >> ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts