[Jenkins] Jenkins로 빌드 배포 자동화 - Jenkins 설치
Updated:
교내 캡스톤 프로젝트인 Promisor의 배포 환경을 Jenkins + AWS Beanstalk로 진행하게 되었습니다.
젠킨스와 AWS Beanstalk 모두 사용해본적이 없기 때문에 배포 과정을 기록으로 남기면 추후에 도움이 될거 같아서 기록을 남기게 되었습니다.
IAM 역할 생성
AWS에서 IAM을 선택하고 IAM 역할을 생성해 주었습니다.
젠킨스가 설치될 EC2에서 S3와 Beanstalk에 접근할 수 있어야 하기 때문에 EC2 서비스를 선택하였습니다.
권한 정책은 S3FullAccess
와 AdministratorAccess-AWSElasticBeanstalk
를 선택해 주었습니다.
역할의 이름과 설명을 추가하고 생성을 완료하였습니다.
여기서 Role은 권한을 의미합니다.
EC2에서 S3와 Beanstalk에 접근하고, 파일을 읽고, 업로드 할 수 있는 권한을 부여해 주었습니다.
EC2 생성
IAM Role 생성을 마친 후, 젠킨스가 설치될 EC2를 생성해 주었습니다.
EC2 → AMI 카탈로그를 선택하였습니다.
Amazon Linux AMI 프리티어를 선택하였습니다.
이름은 EC2의 용도를 나타낼 수 있는 이름으로 등록하였습니다.
기존에 있던 키 페어를 사용해도 되지만 저는 새로운 키 페어를 생성해 주었습니다.
네트워크 보안 그룹은 다음과 같이 설정해 주었습니다.
- SSH : 22 포트
- HTTP : 80 포트
- HTTPS : 443 포트
스토리지는 기본 8GB로 되어있지만 프리티어는 30GB까지 지원하기 때문에 30GB로 변경하였습니다.
마지막으로 인스턴스 생성 버튼을 눌러서 EC2를 완성시켜 주었습니다.
고정 IP를 받기 위해 네트워크 및 보안의 탄력적 IP 탭으로 이동한 다음 새 IP 주소를 생성해 주었습니다.
생생된 탄력적 IP를 클릭하고 EC2와의 연결을 위해서 탄력적 IP 주소 연결을 클릭해 주었습니다.
그리고 앞서 생성한 EC2를 선택하여 연결해 주었습니다.
인스턴스와 탄력적 IP가 잘 연결되었습니다.
생성한 EC2에 IAM Role도 연결하였습니다.
인스턴스 설정을 모두 마치고 젠킨스 설치 과정을 진행하였습니다.
Jenkins 설치파일 받기 & 인스턴스에 Nginx 설치
생성해둔 EC2에 접속합니다.
먼저 패키지 업데이트를 진행하였습니다.
- 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
하나의 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 호출
현재 연결된 EC2는 80, 443 포트만 열어두었기 때문에 외부에서 접근하려면 80, 443 으로만 가능합니다.
Jenkins의 경우 기본 포트가 스프링 부트와 같은 8080입니다.
때문에 Jenkins를 80포트에서도 붙을수 있도록 변경해야 합니다.
변경 방법에는 크게 다음과 같은 2가지 방법이 있습니다.
- Jenkins의 기본 포트를 8080 → 80으로 변경
- 웹서버를 같이 설치해서 웹서버$($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 /
에 내용을 추가해 주었습니다.
수정을 저장하고 nginx를 실행하였습니다.
- sudo service nginx start
Nginx가 jenkins로 프록시를 성공적으로 해주는지 확인하였습니다.
- curl localhost
8080이 아닌 80포트로 요청을 해도 이전의 jenkins 요청때와 같은 결과가 나오는걸 확인하였습니다.
Jenkins 설치
EC2의 퍼블릭 IP를 브라우저에 입력하여 접근하였습니다.
화면에 나온 위치 (/var/lib/jenkins/secrets/initialAdminPassword
) 에 있는 코드를 복사 붙여넣기 하였습니다.
- sudo cat /var/lib/jenkins/secrets/initialAdminPassword
비밀번호를 입력하고 추가 플러그인을 설치해 주었습니다.
플러그인들을 설치해 주고 나서 계정 정보를 등록해 주었습니다.
마침내 Jenkins 페이지로 접근하게 되었습니다.
Leave a comment