해당 내용은 Class101의 현직 대기업 개발자 푸와 함께하는 진짜 백엔드 시스템 실무! 강의를 기반으로 작성했습니다.
h1 -> #0b6e99
h2 -> #d9730d
젠킨스는 개발자의 요청을 받아 빌드와 배포를 해주는 역할
많은 기능이 있지만 주로 빌드&배포 , 배치 할 때 사용
용어 정의
# jenkins 인스턴스에서 실행하는 명령어
sudo yum install wget
sudo yum install maven // 자바 같이 설치됨
sudo yum install git
sudo yum install docker
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install jenkins
sudo systemctl start jenkins // 젠킨스 데몬 실행
sudo systemctl status jenkins // 젠킨스 떴는지 확인
# 여기까지 실행하면 설치는 완료
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
설치할때마다 y를 입력해야하는데 귀찮으면 yum 뒤에 옵션 -y를 추가해주면 된다.
sudo yum -y install wget
그냥 젠킨스를 설치하면 패키지가 없다는 메시지가 출력된다.
따라서 패키지를 따로 설치해줘야 한다.
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
젠킨스가 정상적으로 실행됬는지 확인하자
sudo systemctl status jenkins
소스 IP 범위에서 0.0.0.0/0 으로 설정한다. 이러면 모든 IP를 허용한다는 의미이다.
tcp 8080 포트를 허용한다.
젠킨스 초기 세팅이 끝났다.
배포하는 방식은 여러가지가 있지만 가장 보편적으로 사용하는 배포 방식은
ssh를 통해 접속하여 배포하는 것이다.
젠킨스가 워커로 접속하여 도커 이미지를 pull 하고 run 시키는 것이다.
여기서 중요한 문제가 있다. 젠킨스만 워커의 ssh로 접속가능하게 해야한다.
다른사람이 워커에 접근하면 안된다.
A의 개인키로 암호화를 진행하면, 누구나 복호화가 가능하다.
누구나 복호화 가능하면 암호화가 무슨 의미가 있나? → 하지만 이 개념은 널리 쓰인다.
바로 서명이라는 개념이다. 이 방식을 사용하면 오직 자신만이 암호화가 가능하기 때문에
본인임을 증명할 수 있다.
이 개념을 활용하여 젠킨스 인스턴스라고 증명할 수 있는 ssh연결만 허용해 준다.
너의 공개키로 암호화 : 다른 사람이 아닌 너만 읽을 수 있음(암호 통신 가능)
너의 개인키로 암호화 : 너의 개인키를 알 수 없기 때문에 아무도 볼 수 없음
나의 공개키로 암호화 : 나 밖에 못보기 때문에 의미 없는 암호화
나의 개인키로 암호화 : 모든 사람이 나의 공개키로 복호화 가능하며, 이 암호화는 오직
나만이 가능함(전자서명)
ssh-keygen -t rsa -f ~/.ssh/id_rsa
~/.ssh/
cd .ssh
를 입력하면 된다.vi id_rsa.pub
워커 인스턴스로 접속해 ~/.ssh/authorized_keys 로 접근해 파일을 수정해 주면된다.
vi 에디터로 파일을 열어보면 우리가 워커 인스턴스 페이지에서 ssh 버튼클릭하면 ssh로 접속가능하도록 하는 쉘의 키들이 입력되어 있다.
그런데 나는 해당 경로에 authorized_keys 파일이 존재하지가 않았다.
이전에 vm 환경에 ssh로 접속하면서 비밀번호 입력없이 로그인하는 과정을 진행해봤는데
이 때는 키 생성후 로컬에서(여기서는 젠킨스에서) 원격지로(여기서는 gcp) 키를 전송하면서
authorized_keys를 생성했었다. 그래서 일단 새롭게 authorized_keys 파일을 만들고
젠킨스에서 생성한 공개키를 등록했다.(이후 끝까지 진행했는데 문제 없었다.)
공개키 문자열(젠킨스의 id_rsa.pub)을 복사해 워커 인스턴스의 authorized_keys 파일에 넣어주면된다.
폴더들의 권한을 설정해줘야 한다.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
젠킨스 웹 페이지에서 jenkins 관리 → 시스템 설정 으로 접속
맨 아래에 보면 아까 추가한 Publish over SSH 항목이 있다.
key 부분에 젠킨스 인스턴스의 개인키를 입력한다.
젠킨스 인스턴스의 개인키는 아까 생성한 id_rsa 파일이다.
vi ~/.ssh/id_rsa
sudo yum -y install docker // docker 설치
sudo systemctl start docker // docker demon 실행
sudo chmod 666 /var/run/docker.sock
nohup docker run -p 8080:80 znftm93/spring-boot-cpu-bound > /dev/null 2>&1 &
젠킨스 인스턴스와 워커 인스턴스를 생성 후 젠킨스 세팅을 했다.
젠킨스의 개인키 공개키 쌍을 만든 후, 공개키는 워커에 등록했다.
젠킨스에서 워커 인스턴스로 배포하도록 설정해서 워커 인스턴스에서 도커 이미지를
pull 받아서 run 시키도록 했다.
자동화한 부분은 인스턴스에 접속 → docker image pull → docker run 이 끝이다.
처음이라 그런지 생각보다 굉장히 복잡했다.. 그래도 큰 그림은 이해가 되서 다행이다.
이후 챕터 4에서 github Webhook과 jenkins로 배포 자동화 하는 과정을 진행하고
내 사이드 프로젝트에 적용해 볼 예정이다.