[Jenkins] Jenkins로 빌드 배포 자동화 - Jenkins 설치

Updated:

교내 캡스톤 프로젝트인 Promisor의 배포 환경을 Jenkins + AWS Beanstalk로 진행하게 되었습니다.

젠킨스와 AWS Beanstalk 모두 사용해본적이 없기 때문에 배포 과정을 기록으로 남기면 추후에 도움이 될거 같아서 기록을 남기게 되었습니다.

IAM 역할 생성


AWS에서 IAM을 선택하고 IAM 역할을 생성해 주었습니다.

스크린샷 2022-04-21 오전 1.46.11.png

젠킨스가 설치될 EC2에서 S3와 Beanstalk에 접근할 수 있어야 하기 때문에 EC2 서비스를 선택하였습니다.

스크린샷 2022-04-21 오전 1.47.31.png

권한 정책은 S3FullAccessAdministratorAccess-AWSElasticBeanstalk 를 선택해 주었습니다.

스크린샷 2022-04-21 오전 1.49.25.png

스크린샷 2022-04-21 오전 1.55.27.png

역할의 이름과 설명을 추가하고 생성을 완료하였습니다.

여기서 Role은 권한을 의미합니다.

EC2에서 S3와 Beanstalk에 접근하고, 파일을 읽고, 업로드 할 수 있는 권한을 부여해 주었습니다.

스크린샷 2022-04-21 오전 2.02.49.png

EC2 생성


IAM Role 생성을 마친 후, 젠킨스가 설치될 EC2를 생성해 주었습니다.

EC2 → AMI 카탈로그를 선택하였습니다.

스크린샷 2022-04-21 오전 2.12.51.png

Amazon Linux AMI 프리티어를 선택하였습니다.

이름은 EC2의 용도를 나타낼 수 있는 이름으로 등록하였습니다.

스크린샷 2022-04-21 오전 2.19.03.png

기존에 있던 키 페어를 사용해도 되지만 저는 새로운 키 페어를 생성해 주었습니다.

스크린샷 2022-04-21 오전 2.49.09.png

스크린샷 2022-04-21 오전 2.50.47.png

네트워크 보안 그룹은 다음과 같이 설정해 주었습니다.

  • SSH : 22 포트
  • HTTP : 80 포트
  • HTTPS : 443 포트

스크린샷 2022-04-21 오전 2.46.23.png

스토리지는 기본 8GB로 되어있지만 프리티어는 30GB까지 지원하기 때문에 30GB로 변경하였습니다.

스크린샷 2022-04-21 오전 2.51.35.png

마지막으로 인스턴스 생성 버튼을 눌러서 EC2를 완성시켜 주었습니다.

고정 IP를 받기 위해 네트워크 및 보안의 탄력적 IP 탭으로 이동한 다음 새 IP 주소를 생성해 주었습니다.

스크린샷 2022-04-21 오전 2.59.04.png

생생된 탄력적 IP를 클릭하고 EC2와의 연결을 위해서 탄력적 IP 주소 연결을 클릭해 주었습니다.

스크린샷 2022-04-21 오전 3.04.15.png

그리고 앞서 생성한 EC2를 선택하여 연결해 주었습니다.

스크린샷 2022-04-21 오전 11.23.18.png

인스턴스와 탄력적 IP가 잘 연결되었습니다.

스크린샷 2022-04-21 오전 11.25.08.png

생성한 EC2에 IAM Role도 연결하였습니다.

스크린샷 2022-04-21 오전 11.32.27.png

스크린샷 2022-04-21 오전 11.34.09.png

인스턴스 설정을 모두 마치고 젠킨스 설치 과정을 진행하였습니다.

Jenkins 설치파일 받기 & 인스턴스에 Nginx 설치


생성해둔 EC2에 접속합니다.

스크린샷 2022-04-21 오전 11.49.36.png

먼저 패키지 업데이트를 진행하였습니다.

  • sudo yum update

Amazon Linux의 기본 Java는 7이기 때문에 Java 8을 설치해 주었습니다.

  • sudo yum install -y java-1.8.0-openjdk-devel.x86_64

Java 8 설치를 마치고 Java 버전을 8로 변경하였습니다.

  • sudo /usr/sbin/alternatives —config java

스크린샷 2022-04-21 오전 11.56.18.png

하나의 java 버전만이 존재하기 때문에 선택을 유지해 주었습니다.

만약 버전이 변경되었다면 아래의 명령어를 사용하여 사용하지 않는 Java 7을 삭제해 주면 됩니다.

  • sudo yum remove java-1.7.0-openjdk -y

현재 버전이 Java 8인지를 확인하였습니다.

  • java -version

Java 8 설치를 마치고 git을 설치하였습니다.

  • sudo yum install git

기본적인 작업을 마치고 Jenkins 설치 파일을 받는 과정을 진행하였습니다.

  • sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

jenkins key를 import 해주었습니다.

  • sudo rpm —import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

받은 설치파일을 통해 Jenkins를 설치하였습니다.

  • sudo yum install jenkins

jenkins를 실행해 주었습니다.

  • sudo service jenkins start

정상적으로 jenkins가 실행되고 있는지 확인하기 위해서 다음 명령어를 입력해 주었습니다.

  • sudo service jenkins status // 상태 확인

    curl localhost:8080 // 실제 url 호출

스크린샷 2022-04-21 오후 12.28.21.png

현재 연결된 EC2는 80, 443 포트만 열어두었기 때문에 외부에서 접근하려면 80, 443 으로만 가능합니다.

Jenkins의 경우 기본 포트가 스프링 부트와 같은 8080입니다.

때문에 Jenkins를 80포트에서도 붙을수 있도록 변경해야 합니다.

변경 방법에는 크게 다음과 같은 2가지 방법이 있습니다.

  1. Jenkins의 기본 포트를 8080 → 80으로 변경
  2. 웹서버를 같이 설치해서 웹서버$($80 포트)가 Jenkins$($8080포트)로 프록시 하도록 한다.

웹서버를 중간에 두면 Jenkins로 실행한 테스트 결과 HTML을 Nginx를 통해 접근 가능하기도 하고 여러 이점이 많기 때문에 2번째 방법을 선택했습니다.

Nginx 설치를 해주었습니다.

  • sudo yum install nginx // 혹은 sudo amazon-linux-extras install nginx1

설치를 마치고 Nginx로 들어온 요청을 Jenkins로 프록시 할 수 있도록 설정을 수정하였습니다.

  • sudo vim /etc/nginx/nginx.conf

다음과 같이 location / 에 내용을 추가해 주었습니다.

스크린샷 2022-04-21 오후 1.03.26.png

수정을 저장하고 nginx를 실행하였습니다.

  • sudo service nginx start

Nginx가 jenkins로 프록시를 성공적으로 해주는지 확인하였습니다.

  • curl localhost

스크린샷 2022-04-21 오후 1.07.34.png

8080이 아닌 80포트로 요청을 해도 이전의 jenkins 요청때와 같은 결과가 나오는걸 확인하였습니다.

Jenkins 설치


EC2의 퍼블릭 IP를 브라우저에 입력하여 접근하였습니다.

스크린샷 2022-04-21 오후 1.10.42.png

화면에 나온 위치 (/var/lib/jenkins/secrets/initialAdminPassword) 에 있는 코드를 복사 붙여넣기 하였습니다.

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

스크린샷 2022-04-21 오후 1.14.19.png

비밀번호를 입력하고 추가 플러그인을 설치해 주었습니다.

스크린샷 2022-04-21 오후 1.15.08.png

플러그인들을 설치해 주고 나서 계정 정보를 등록해 주었습니다.

마침내 Jenkins 페이지로 접근하게 되었습니다.

스크린샷 2022-04-21 오후 1.20.12.png

Categories:

Updated:

Leave a comment