catsridingCATSRIDING|OCEANWAVES
Ops

Jenkins CI/CD Pipeline 구축하기 01. AWS EC2에 Jenkins 서버 구축하기

jynn@catsriding.com
Oct 26, 2023
Published byJynn
999
Jenkins CI/CD Pipeline 구축하기 01. AWS EC2에 Jenkins 서버 구축하기

Install Jenkins on AWS EC2

CI/CD 파이프라인 구축의 첫걸음은 AWS EC2 인스턴스 내부에서 Jenkins를 설치하고 실행하는 것입니다. 이를 위해, Jenkins를 호스팅할 AWS EC2 인스턴스를 먼저 생성합니다. 제가 사용한 EC2 인스턴스는 다음과 같은 사양을 지니고 있습니다:

  • OS: Amazon Linux 2
  • Type: t2.medium
  • EBS: 30GB

보안 설정은 다음과 같이 구성하였습니다:

  • 인바운드 규칙:
    • SSH: EC2 인스턴스에 접속 가능
    • TCP Port 8080: Jenkins UI에 접속 가능
    • HTTP & HTTPS: 초기 환경 구성을 위해 초기에는 모든 IP 허용
  • 아웃바운드 규칙:
    • 모든 트래픽 허용

EC2 인스턴스 생성 완료 후에는, 터미널을 열어 ssh 프로토콜을 이용하여 EC2 인스턴스에 접속할 수 있습니다.

$ ssh -i {key-pair.pem} ec2-user@{ec2-public-ip}
  • key-pair.pem: EC2를 생성할 때 설정한 .pem 키입니다.
  • ec2-public-ip: EC2의 Public IP 주소를 의미합니다.

EC2 인스턴스에 접속한 후에, 첫 번째 단계로 모든 패키지를 최신버전으로 업데이트합니다.

$ sudo yum update –y

Jenkins에서 GitHub 웹훅과 연동하기 위해서는, Git이 설치되어 있어야 합니다. 아래의 명령어로 Git을 EC2 인스턴스에 설치합시다.

$ sudo yum install git -y

그 다음, Jenkins 리포지토리를 추가하는 절차를 수행합니다.

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

이제 Jenkins-CI에서 제공하는 key file을 가져와야 합니다.

$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

$ sudo yum upgrade

다음으로, Jenkins 동작에 필요한 Java를 설치합니다.

$ sudo dnf install java-17-amazon-corretto -y

Java 설치가 완료되면, 이제 Jenkins를 설치합니다.

$ sudo yum install jenkins -y

EC2 인스턴스가 부팅될 때마다 자동으로 Jenkins가 실행될 수 있도록 Linux Service에 등록하는 설정 작업을 진행합니다.

$ sudo systemctl enable jenkins

Created symlink /etc/systemd/system/multi-user.target.wants/jenkins.service → /usr/lib/systemd/system/jenkins.service.

모든 설정이 완료되었으니, Linux 서비스로 Jenkins를 실행합니다.

$ sudo systemctl start jenkins &

마지막으로, Jenkins가 정상적으로 실행되고 있는지를 확인합니다. 실행 상태를 점검하면서 초기 설정을 위한 패스워드도 로그에서 확인할 수 있습니다.

$ sudo systemctl status jenkins

● jenkins.service - Jenkins Continuous Integration Server
     Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; preset: disabled)
     Active: activating (start) since Fri 2024-02-09 15:44:43 UTC; 38s ago
   Main PID: 26822 (java)
      Tasks: 44 (limit: 1114)
     Memory: 357.2M
        CPU: 35.629s
     CGroup: /system.slice/jenkins.service
             └─26822 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
Feb 09 15:44:53 ip-172-31-11-157.ap-northeast-2.compute.internal jenkins[26822]: *************************************************************
Feb 09 15:44:53 ip-172-31-11-157.ap-northeast-2.compute.internal jenkins[26822]: *************************************************************
Feb 09 15:44:53 ip-172-31-11-157.ap-northeast-2.compute.internal jenkins[26822]: *************************************************************
Feb 09 15:44:53 ip-172-31-11-157.ap-northeast-2.compute.internal jenkins[26822]: Jenkins initial setup is required. An admin user has been created and a password generated.
Feb 09 15:44:53 ip-172-31-11-157.ap-northeast-2.compute.internal jenkins[26822]: Please use the following password to proceed to installation:
Feb 09 15:44:53 ip-172-31-11-157.ap-northeast-2.compute.internal jenkins[26822]: 83fa88***************
Feb 09 15:44:53 ip-172-31-11-157.ap-northeast-2.compute.internal jenkins[26822]: This may also be found at: /var/lib/jenkins/secrets/initialAdminPassword
Feb 09 15:44:53 ip-172-31-11-157.ap-northeast-2.compute.internal jenkins[26822]: *************************************************************

이번에는 웹 브라우저를 열고 http://{ec2-public-ip}:8080로 접속해봅니다. Unlock Jenkins 페이지가 나타나면, Jenkins 서버 구축이 성공적으로 완료된 것입니다.

install-jenkins-on-aws-ec2_01.png

시스템 로그에서 찾은 패스워드를 이용해 Jenkins의 초기 구성 화면으로 진입할 수 있습니다. 이 이후의 과정은 다음 Jenkins와 GitHub Webhooks 연동하기에서 살펴보겠습니다. 🚕 💨


  • AWS
  • CI / CD