1. 서비스 시작하기

Jenkins로 자동 빌드/테스트/배포 환경을 구성하려면, 서버부터 필요하다. 회사에서는 남아도는 서버지만, 집에서는 어디 구할데가 없어서 Amazon의 AWS EC2를 할당받아서 Jenkins 환경을 구성했다.


1. AWS EC2 만들기#

  1. AMI: Ubuntu LTS (arm64 for t4g, x86_64 for t3/t3a)

  2. 인스턴스 타입: t4g.small (또는 t3a.small)

  3. 키 페어: 새로 생성(.pem) ~/.ssh/sample.pem을 아래와 같이 생성하였음. (ssh private-key)

    • ~/.ssh/sample.pem

      -----BEGIN RSA PRIVATE KEY-----
      (생략)
      -----END RSA PRIVATE KEY-----
  4. 보안 그룹(인바운드)

    • SSH: 22/tcp → 0.0.0.0/0 (이렇게 설정하면 전세계에서 ssh로 해당 서버 접속 가능해짐)
    • Jenkins: 8080/tcp → My IP(처음엔 내 IP만; 나중에 Nginx 붙이면 80/443만 공개)

    인바운드 편집은 아래와 같이 진행한다.

    image.png

    위와 같이 인바운드 규칙 편집을 누르면 아래와 같은 화면이 나온다.

    포트 범위를 8080으로 지정하고 IP는 외부에서 접속시도 하는 곳의 IP를 넣어주면 되는데, 내IP는 소스의 list box를 보면 내 IP를 선택할 수 있고, 이것을 선택하면 IP가 자동으로 들어간다.

    만약 전세계 모든 곳에서 접속을 허용하고 싶다면, 0,0,0,0/0으로 설정하면 된다.

    image.png

  5. 퍼블릭 IP 반드시 할당(퍼블릭 서브넷)

    참고로 나의 EC2 Public IP는 13.55.97.27 이다. (지금은 변경된 상태)


2. SSH로 EC2 접속#

chmod 400 ~/.ssh/<키>.pem
ssh -i ~/.ssh/<키>.pem ubuntu@<퍼블릭_IP>

위에서 만든 ~/.ssh/sample.pem을 예로 들면 아래와 같다.

chmod 400 ~/.ssh/sample.pem
ssh -i ~/.ssh/sample.pem ubuntu@13.55.97.27

3. 필수 패키지 + Java 설치#

sudo apt-get update -y
sudo apt-get install -y git curl unzip fontconfig openjdk-17-jdk

java -version 확인: 17 이상이면 OK


4. Jenkins 저장소 추가 + 설치#

# Jenkins LTS GPG 키/리포지토리 등록
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 -y
sudo apt-get install -y jenkins

5. Jenkins 서비스 시작/상태 확인#

sudo systemctl enable --now jenkins          # Jenkins 서버 자동 시작 등록 & 즉시 start
sudo systemctl status jenkins --no-pager -l  # Jenkins 서버 서비스 상태 확인
  • Active: active (running) 이면 성공

    아래와 같은 경우 Active: inactive (dead) 로 Jenkins 서버가 죽어있는 상태

    image.png

    제대로 살아있다면 다음과 같은 화면이 나온다.

    image.png

  • 기본 포트: 8080(모든 인터페이스에 바인딩)

로컬에서 리슨 확인:

sudo ss -lntp | grep :8080

image.png

결과가 위와 같이 *:8080 이면 외부에 열려있는 상태이다.

💡 Comment#

참고로 sudo systemctl enable --now jenkins 명령어는 sudo systemctl start jenkins 명령어를 포함한다. start 명령어만 입력하면 EC2서버 재시작시 Jenkins 서비스는 시작되지 않는데, enable 명령을 해줘야 EC2 서버 재시작 할 때도 Jenkins 서비스가 start된다.

당연한 얘기지만, Jenkins 서비스를 강제로 종료한 경우에는 start 명령어만 입력하면 된다.


6. Jenkins 서버 접속#

AWS EC2에서 Jenkins 서비스를 시작했으므로 외부 환경에서 EC2 Jenkins 서버에 접속해본다.

http://<퍼블릭_IP>:8080으로 접속하면 된다.

현재 나의 EC2 Public_IP는 13.55.97.27이므로 아래와 같이 접속할 수 있다.

image.png


7. 초기 설정(Unlock → 플러그인 → 관리자 계정)#

sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  • 화면에 나오는 Unlock 입력 → Install suggested plugins
  • 관리자 계정 생성 → Jenkins 대시보드 진입

8. (선택) 기본 하드닝 & 편의#

  • 시간대: sudo timedatectl set-timezone Asia/Seoul
  • 컨트롤러는 가볍게: Manage Jenkins → Nodes → Built-In Node → # of executors = 0
  • 보안 그룹 정리: 8080은 임시로만 열고, 운영은 Nginx(80/443) 역프록시 + TLS 권장
  • 백업: /var/lib/jenkins EBS 스냅샷 주기적 생성

💡 Comment#

7~8번은 ChatGPT가 알려준거 그대로 적은건데, 내가 했었던건지는 잘 모르겠다. 8번 세팅은 한적이 없고 7번은 한적이 있는지 잘 모르겠음.


※ 붙여넣기용 한방 설치 스크립트#

# 1) 업데이트 & Java
sudo apt-get update -y
sudo apt-get install -y git curl unzip fontconfig openjdk-17-jdk

# 2) Jenkins repo + 설치
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 -y
sudo apt-get install -y jenkins

# 3) 서비스 시작 & 상태 확인
sudo systemctl enable --now jenkins
sudo systemctl status jenkins --no-pager -l

# 4) 초기 비번 표시
sudo cat /var/lib/jenkins/secrets/initialAdminPassword