CI/CD에 대한 개념파악 및 AWS EC2에 Jenkins 설치
CI/CD는 애플리케이션 개발 단계부터 배포 단계까지 자동화 하여 개발한 애플리케이션을 사용자에게 빠르게 제공하는 방법이다.
CI
- CI는 Continuous Integration의 약자이며 지속적 통합 이란 뜻이다.
- 여러 개발자가 작성한 코드를 Github, Bitbucket과 같은 코드 형상관리 툴을 이용하여 Repository에 통합하고 빌드 및 테스트가 정상적으로 이뤄지는지 확인하는 과정을 얘기한다.
- Repository에 개발한 코드들의 변경사항에 대해 주기적으로 변경함으로써 모든 개발자들에게 동일한 작업환경을 제공함으로써 버그를 사전에 미리 발견하고 소프트웨어 품질을 개선하는 장점이 있다.
CD
- CD는 Continuous Delivery or Continuous Deployment 두 용어의 약자이며 지속적 제공 or 지속적 배포 란 뜻이다.
- Continuous Delivery는 CI가 정상적으로 완료되었으면 릴리스 할 배포 단계를 거치게 되는데 이때 프로덕션에 배포하기 전에 개발자 or QA팀에서 한번 검증을 하고 정상적으로 되면 그때 수동으로 프로덕션에 배포하는 걸 말한다.
- Continuous Deployment는 Continuous Delivery와 살짝 비슷하지만 프로덕션 배포를 자동으로 하는걸 의미한다.
- 지속적으로 제공 및 배포를 함으로 써 빠른시간안에 사용자들에게 서비스를 배포할 수 있으며 개발의 효율성과 릴리즈 기간도 단축할 수 있다.
Jenkins
- CI/CD 일련의 과정을 편리하게 해주는 도구로 Jenkins, Travis, Github Action이 있는데 이 글에서는 AWS EC2에 Jenkins에 설치하는 방법을 알아보자.
Jenkins 설치
AMI는 Amazon Linux AMI 2를 선택하자.
t2.micro로 생성하면 Jenkins 서버가 죽을 수 있기 때문에 t2.small로 생성을 해두자.
네트워크 설정 탭 오른쪽에 편집버튼을 클릭하면 보안그룹을 편집할 수 있는데 포트번호 22, 8080두개의 포트를 자신의 IP만 허용할 수 있도록 생성하자. 22는 SSH로 접속하기 위해 열어둔 것이고 8080은 Jenkins의 기본포트이다.
SSH로 접근하기 위해 키파일이 있어야 하는데 'jenkins' 라는 이름의 key파일로 생성을 하고 화면 우측의 인스턴스 시작 버튼을 클릭하자.
ssh -i pem파일경로 ec2-user@퍼블릭IP
위 명령어로 Jenkins Server에 접근하자.
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 amazon-linux-extras install -y java-openjdk11
sudo yum install -y jenkins
sudo systemctl start jenkins.service
Jenkins를 yum repository에 등록 후 설치하자. Jenkins는 JAVA로 돌아가기 때문에 JAVA도 설치하고 Jenkins를 실행해보자.
sudo systemctl status jenkins.service 명령어를 실행했을 때 위 사진처럼 나오면 정상적으로 Jenkins가 실행된 것이다.
퍼블릭IP:8080 으로 접속하면 다음과 같은 화면을 볼 수 있는데 어드민 계정의 암호을 입력해야 하는데 화면에 보이는 파일에 암호가 적혀있다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
해당 명령어를 실행하면 암호를 확인할 수 있다.
두가지 선택창이 나오는데 Jenkins에서 추천해주는 추천 플러그인을 설치하자.
Gradle, Git, Github, Pipeline, SSH 등 다양한 Plugin을 알아서 설치해준다.
Admin 계정정보를 입력해준다.
해당화면은 넘어가도 된다. Jenkins의 root url을 지정하는건데 현재 서버의 IP주소 + 포트로 지정하면 된다.
여기까지 오면 Jenkins가 정상적으로 설치되었다.
주의
현재 파일시스템에 할당된 용량은 대략 8GB정도 되는데 Jenkins에 설치된 plugin이 많고 작업Item이 많으면 많을수록 가용용량이 급 줄어들어서 Jenkins Server가 뻗을 수 있다.
그래서 Jenkins Server에 plugin을 설치하거나 작업Item이 많아질 수록 용량을 확인하여 여유공간 1GB정도 남았을 때 볼륨 크기를 늘려줘야 뻗지 않는다.