ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [배포자동화구축] 2-1. AWS EC2에 jenkins 설치하여 배포서버 구축하기
    Project 2023. 10. 14. 02:57

     

    현재 진행하고 있는 배포전략은 위와 같다. 이전 게시글에서 Github Actions를 구축했고 github이 보내는 webhook요청으로 jar파일을 만들고 운영서버로 전송하는 배포서버를 구축해야 한다. 

     

    이번 단계에서는 AWS EC2에 인스턴스를 생성하여 jenkins를 설치하고 설정하는 과정까지만 수행하고, 다음 단계에서 jenkins pipeline 구축을 진행할 것이다. 

     

    진행하며 OS나 버전이 맞지 않으면 자잘한 오류가 발생할 수 있으므로 처음부터 아래 내용과 동일하게 설정하는 것을 권장드린다.

    (아니면 나중에 가서 인스턴스를 삭제하고 또다시 만들어야 할 수도 있다..)

     

     

    1. AWS EC2에 배포서버 생성하기

     

    1-1 리전을 서울로 맞추고 '인스턴스 시작'으로 인스턴스 생성하기

     

     

    1-2 인스턴스 이름을 설정하고 OS를 ubuntu로 선택 

     

    아래에서 해당 인스턴스를 프리티어로 사용할 수 있는지 확인한다

     

     

    1-3 키페어 탭에서 새로운 키페어 생성

     

    키페어 이름을 입력하고 키페어 생성 버튼을 클릭하여 pem 파일을 다운로드한다

    키페 어는 ssh로 해당 서버를 접속할 때 반드시 필요하고 한번 다운로드하면 재다운로드가 불가능하기 때문에 안전한 위치에 저장한다.

     

     

    1-4 스토리지 볼륨을 프리티어 최대 용량인 30 GiB로 변경

     

    기본은 8로 설정되어 있는데 프리티어 최대 크기인 30으로 높여준다

     

     

    1-5 인스턴스 시작버튼을 눌러 인스턴스 생성 

     

     

    1-6 보안그룹에서 인바운드 규칙 설정

     

    인스턴스 id를 클릭하여 상세페이지에 접속하면 아래에 보안탭이 있다. 보안그룹을 클릭하여 인바운드 규칙 편집 버튼을 클릭한다 

     

     

     

    인바운드 규칙은 특정 포트로 해당 서버에 접속할 수 있도록 포트를 열어주는 것이고, 아웃바운드 규칙은 해당 인스턴스에서 외부로 접근할 때 허용해 주는 일종의 방화벽 설정이라고 이해하면 된다.

     

    지금 설치한 인스턴스에 jenkins를 설치할 것이고, 외부에서 이 jenkins 서버에 접속할 수 있도록 해야 하므로 인바운드 규칙에 9090 포트를 추가하여 접속을 허용한다. 9090은 임의로 설정한 포트 번호고 원하는 포트번호로 설정하면 된다. 

     

     

    2. EC2 인스턴스 초기 설정하기

     

    2-1 해당 인스턴스 ssh로 접속하기 

     

    인스턴스 아이디를 클릭하고 오른쪽 위에 있는 연결 버튼을 누른다 

     

     

    cmd를 켜고 아까 인스턴스 생성 때 저장했던 키페어가 저장된 위치로 이동하여 복사한 명령어를 붙여 넣기 하여 접속한다

      

     

    접속 전에 pem키에 대한 접근권한을 400으로 설정하여 읽기 권한을 소유자한테만 부여한다

     

     

    2-2 인스턴스에 접속하여 swap 메모리 할당하기 

     

    프리티어 가용 RAM이 1GB밖에 안되기 때문에 HDD공간을 RAM처럼 활용할 수 있도록 swap 메모리를 할당한다.

    jenkins가 무겁기 때문에 실행으로 서버 부하가 생기지 않으려면 해당 설정이 반드시 필요하다.

     

    https://repost.aws/ko/knowledge-center/ec2-memory-swap-file

     

    스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당

    Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 스왑 파일로 사용할 메모리를 할당하려고 합니다. 어떻게 해야 하나요?

    repost.aws

     

    해당 페이지에 있는 명령을 순차적으로 진행하는데, 해당 페이지는 swap메모리를 4GB로 설정하고 있다.

    보통 RAM용량의 2배 정도 할당하기 때문에 2GB로 수정하여 다음과 같이 할당해 보자.

    $ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048// 2GB로 설정. 명령어 수행에 시간이 좀 걸린다
    $ sudo chmod 600 /swapfile
    $ sudo mkswap /swapfile
    $ sudo swapon /swapfile
    $ sudo swapon -s
    $ sudo vi /etc/fstab

     

    열린 파일 가장 마지막 라인에 /swapfile swap swap defaults 0 0를 추가하여 저장한다

     

     

    free 명령어를 통해 확보된 swap 메모리를 확인한다

     

     

    3. EC2에 젠킨스 설치하기

     

    3-1 젠킨스 설치

     

    젠킨스 다운로드 링크인데 해당 페이지에 있는 명령어들을 순차적으로 수행한다

    https://pkg.jenkins.io/debian-stable/

     

    Debian Jenkins Packages

    Jenkins Debian Packages This is the Debian package repository of Jenkins to automate installation and upgrade. To use this repository, first add the key to your system: curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \ /usr/s

    pkg.jenkins.io

    $ curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
        /usr/share/keyrings/jenkins-keyring.asc > /dev/null
    $ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
        https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
        /etc/apt/sources.list.d/jenkins.list > /dev/null
    $ sudo apt-get update
    $ sudo apt-get install fontconfig openjdk-11-jre //jre 설치
    $ sudo apt-get install jenkins

     

    3-2 젠킨스 포트번호 8080에서 9090으로 변경

     

    아까 인스턴스의 보안그룹에서 jenkins 포트를 9090으로 설정해 줬기 때문에, 디폴트로 설정되어 있는 8080을 9090으로 변경해 준다.

    $ sudo vi /etc/default/jenkins

     

    $ sudo vi /etc/init.d/jenkins

     

    $ sudo vi /usr/lib/systemd/system/jenkins.service

     

     

    3-3 젠킨스 실행 및 포트번호 확인 

    $ sudo systemctl daemon-reload
    $ sudo service jenkins start
    $ sudo systemctl status jenkins.service// 포트번호 9090인지 확인

     

    해당 부분에서 포트번호를 확인할 수 있는데 위에서 설정을 해도 9090으로 변경이 안되었을 수 있다

    따라서 캡쳐본 상단에 있는 명령어를 순차적으로 수행하여 젠킨스 서비스를 중단했다 재시작하고 포트번호가 변경되었는지 확인해 본다

     

     

    3-4 젠킨스 접속 후 계정 설정하기 

     

    AWS EC2 인스턴스 상세페이지에 보면 퍼블릭 IPv4 주소를 확인할 수 있다. 해당 ip주소:9090으로 접속해 본다

    만약 로딩이 오래 걸리면 위에 설정했던 인바운드 규칙 9090이 제대로 추가되어 있는지 확인해 본다.  

     

     

    입력할 admin password는 아래 경로에서 확인할 수 있다 

    $ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

     

    다음으로 플러그인 설치를 진행하는데 디폴트 설정인 Install suggested plugins를 선택하여 설치를 진행한다.

     

     

    설치가 끝나면 admin user의 id와 pwd를 설정하는데, 나는 초기 비밀번호 그대로 입력했다.

    앞으로 접속할 때 해당 계정으로 로그인하기 때문에 기억하고 있어야 한다.

     

    모든 내용을 입력하고 다음페이지인 configuration도 입력된 그대로 저장하여 계정등록을 마무리한다. 

     

     

    4. 젠킨스 초기설정 하기 

     

    4-1 JDK 설치 

    먼저 아까 젠킨스 설치 시 JRE 11만 설치했기 때문에 EC2에 추가적으로 jdk를 설치해 준다

     

    $ sudo apt-get install openjdk-11-jdk
    $ which javac // 해당 명령어 수행시 경로가 나오면 정상적으로 설치된 것이다

     

     

    4-2 젠킨스에 JDK 설정

     

    환경변수 JAVA_HOME 설정을 위해 해당 경로로 jdk가 설치되어 있는지 확인한다

     

    $ cd /usr/lib/jvm/java-11-openjdk-amd64 // 경로 확인
    $ sudo vim /etc/profile// JAVA_HOME 환경변수 설정
    $ source /etc/profile// 변경된 프로필 적용
    # echo $JAVA_HOME// 환경변수 확인

     

    환경변수 설정 시 /etc/prifile 편집기가 열리면 맨 하단에 변수 명을 JAVA_HOME으로 설정한 jdk 패키지 경로를 저장해 준다

     

     

     

    다음으로 젠킨스 메인페이지에서 Manage -> Tools를 접속하여 아래에 JDK 설정을 추가한다

     

     

    Install Automatically는 해제한다

     

     

    4-3 EC2에 git 설치 및 젠킨스 설정 

     

    $ sudo apt update
    $ sudo apt install git
    $ which git // 해당 경로를 설정에 있는 git path에 작성한다

    Install Automatically는 해제한다

     

     

    4-4 Gradle 설정

     

     

    Install Automatically를 체크하고 spring boot 프로젝트에서 사용하고 있는 gradle의 버전과 동일한 버전으로 변경해 준다

    만약 maven일 경우 maven 탭에서 똑같이 진행하면 된다

     

     

    이렇게 배포서버에 젠킨스를 설치하고 기초설정까지 완료하였다.

    다음단계에서는 github과 젠킨스 사이를 연동하고, 젠킨스에 PipeLine를 추가하여 빌드 및 배포가 자동으로 수행될 수 있도록 구성해 볼 것이다

     

     

Designed by Tistory.