Jenkins로 배포 자동화 - CD

LJH·2021년 12월 5일
4

이전 글에서 다룬 내용을 내 프로젝트에 적용해보자.


1. 젠킨스 인스턴스 생성 및 접속

인스턴스 생성

  • AWS Marketplace 탭에서 검색해야 검색된다.

  • Centos 7 이미지를 선택하자.

  • 새 키 페어를 생성후 다운받고 잘 보관하자.

인스턴스 접속

  • 다운받은 .pem 파일을 이용해 .ppk파일을 만들어야 한다.
  • putty key generator 툴을 이용했다.(Mobaxterm 으로도 가능)
  • Load 버튼클릭 → .pem 파일선택 → SSH-1 (RSA) 선택 → Save private key 클릭

  • 이후 ssh 연결 시 만든 키를 선택해서 접속하면 된다.

  • 정상적으로 접속 됐다.
  • 참고로 접속 시 비밀번호를 물어보는데 초기 비밀번호는 해당 서버의 OS이다. (os가 ubuntu라면 비밀번호도 ubuntu)

2. 젠킨스 설치

# jenkins 인스턴스에서 실행하는 명령어 (한 줄씩 실행하면서 정상적으로 실행이 되고 있는지 꼭 확인)
sudo yum -y install wget
sudo yum -y install maven // 자바 같이 설치됨
sudo yum -y install git
sudo yum -y install docker

sudo vi /etc/yum.repos.d/epelfordaemonize.repo // 내용은 아래 확인
sudo yum install daemonize -y
sudo yum install jenkins java-1.8.0-openjdk-devel -y
sudo systemctl start jenkins // 젠킨스 데몬 실행
sudo systemctl status jenkins // 젠킨스 떴는지 확인

젠킨스 설치 에러

  • GCP와 AWS 인스턴스가 달라서인지, 젠킨스 레포가 바뀐건지 모르겠지만 아래와 같은 에러가 발생했다.
  • 안내 문구대로 에러를 해결했다.

  • 하지만 젠킨스 설치시 에러가 발생했다.

에러 해결

[daemonize]
baseurl=https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/
gpgcheck=no
enabled=yes
  • 젠킨스 설치
sudo yum install daemonize -y
sudo yum install jenkins java-1.8.0-openjdk-devel -y
  • 젠킨스가 정상적으로 실행됬는지 확인하자

  • Active : active (running)로 나오면 정상적으로 젠킨스가 실행된 것이다.

sudo systemctl status jenkins


3. 젠킨스 초기 세팅

포트 설정

  • 젠킨스는 디폴트가 8080 포트로 실행된다. 따라서 방화벽에서 해당 포트로의 접근을 허용해줘야 접근가능하다.

  • 8080포트에 대해 모든 접근을 허용하도록 설정한다.

젠킨스 설정

  • 자세한과정은 링크를 참고

4. 젠킨스만 워커에 접근 가능하도록 설정

  • 마찬가지로 왜 젠킨스만 접근가능해야 하는지 자세한 이야기는 링크를 참고하자.

공개키 등록

  1. 젠킨스 인스턴스에서 키 생성
ssh-keygen -t rsa -f ~/.ssh/id_rsa
  • 명령어를 입력하면 뭐를 입력하라고 나오는데 그냥 모두 enter 눌러주면 된다.
  1. 공개키 확인
~/.ssh/
cat id_rsa.pub
  • 위 명령어를 입력후 나오는 문자열을 처음부터 끝까지 복사한다.
  1. 워커 인스턴스(애플리케이션을 띄우는 인스턴스)에 공개키 등록
cd ~/.ssh
cat authorized_keys
vi authorized_keys
  • 이전에 gcp에서 할 때는 authorized_keys 파일이 없어서 새로 생성해서 사용했는데
    이번에는 생성되어 있었다.
  • 2번에서 복사한 공개키를 authorized_keys 파일에 넣어준다.

  1. 권한 설정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

개인키 등록

  • 젠킨스 웹 페이지에서 jenkins 관리 → 시스템 설정 으로 접속 → 맨아래 보면 Publish over SSH 탭 존재
  • 젠킨스 인스턴스에서 개인키 조회
cat ~/.ssh/id_rsa
  • 조회한 키를 젠킨스 웹 페이지 key 부분에 입력
  • 개인키 등록할 때 ——BEGIN RSA.. —— ~ ——END RSA ... 부분까지 포함 해야한다.

SSH Server 등록

  • name → 식별 가능한 워커 인스턴스 이름

  • hostname → 워커 인스턴스의 내부 ip

  • username → 워커 인스턴스에 로그인 되어있는 아이디

    • GCP에서는 인스턴스 생성한 구글 계정 id였지만 이걸로 하면 로그인 되지 않는다.
    • 워커 인스턴스 즉 내 애플리케이션이 돌아가는 인스턴스의 username은 ssh 연결시 입력하는 username과 같다. 또는 아래와 같이 콘솔에 나오는 부분으로 확인가능하다.

  • Remote Directory → 워커 인스턴스의 홈 디렉토리의 경로를 입력해준다.


5. 배포 스크립트 작성

  • 새 아이템을 만든다.
    • 인스턴스에 접근해서 실행할 명령어들을 명시해주면 된다.
    • Docker Image pull → 실행중인 컨테이너를 중지 → 컨테이너 생성 및 실행

6. 빌드

  • Build Now를 클릭하면 실행된다.

  • 한번에 초록불이 떴다. 로그를 보자.

  • 인스턴스에서 확인해보자.
    • 별다른 명령어를 입력하지 않았는데 컨테이너 id가 바뀐걸 볼 수 있다.
      배포가 자동으로 잘 이뤄졌다.

#다음

  • GitHub Action에서 테스트 및 빌드가 자동으로 끝나고, Jenkins에서 빌드 버튼을 직접 눌러줘야 한다.

  • 다음글에서는 GitHub Action에서 작업이 끝난 후 Jenkins 서버로 요청을 보내서 자동으로 배포가 이루어지도록 하는 내용을 다룬다.

0개의 댓글