Jenkins 서버를 AWS EC2에서 운영하려면, 우선적으로 네트워크 환경(VPC, 서브넷 등)을 구성해야 합니다.


TempDev-VPC10.0.0.0/16 (VPC 내부 네트워크 범위 설정, 기본적으로 넓게 설정)없음 (IPv6 사용하지 않을 경우)기본VPC 내부에서 EC2 인스턴스가 위치할 서브넷을 만들어야 합니다.
설정 방법:
VPC 대시보드 → 서브넷 → "서브넷 생성" 클릭

퍼블릭 서브넷 설정


TempDev-Public-SubnetTempDev-VPC10.0.1.0/24ap-northeast-2a (AWS 서울 리전 선택)퍼블릭 서브넷의 EC2 인스턴스가 인터넷과 연결되려면 인터넷 게이트웨이(IGW)가 필요합니다.
VPC 대시보드 → 인터넷 게이트웨이 → "인터넷 게이트웨이 생성" 클릭

이름 태그: TempDev-IGW

생성 후 "VPC 연결" → TempDev-VPC 선택 → 연결 클릭


인터넷 게이트웨이를 사용하도록 라우팅 테이블(Route Table)을 수정합니다.
VPC 대시보드 → 라우팅 테이블 → "라우팅 테이블 생성" 클릭

설정

TempDev-Public-RTTempDev-VPC라우팅 테이블 → 경로 편집



0.0.0.0/0TempDev-IGW하위 네트워크 연결 → TempDev-Public-Subnet 선택 → 연결 클릭


✅ 이제 TempDev-Public-Subnet에 있는 EC2 인스턴스가 인터넷과 통신할 수 있음
VPC가 설정되었으니 이제 Jenkins를 실행할 EC2 인스턴스를 생성합니다.
AWS 콘솔 → EC2 → "인스턴스 시작" 클릭

기본 설정
Jenkins-ServerUbuntu 22.04 LTS (Amazon Linux 2도 가능)t3.micro (메모리와 CPU 고려)

jenkins-server-key.pem (SSH 접속을 위한 키 생성)TempDev-VPCTempDev-Public-Subnet활성화SSH (22) → Anywhere (0.0.0.0/0)HTTP (80) → Anywhere (0.0.0.0/0)HTTPS (443) → Anywhere (0.0.0.0/0)Jenkins (8080) → Anywhere (0.0.0.0/0)EC2 인스턴스를 실행한 후, SSH로 접속하여 기본적인 설정을 진행합니다.
SSH 접속 (저는 VSCode로 ssh 연결을 했습니다.)

ssh -i jenkins-key.pem ubuntu@your-ec2-public-ip
패키지 업데이트
sudo apt update && sudo apt upgrade -y
EC2에서 Jenkins를 실행하려면 Java와 Docker가 필요하며, Jenkins 데이터를 유지하기 위해 볼륨 설정이 필요합니다.
sudo apt install -y openjdk-17-jdk
✅ 설치 후 확인
java -version
출력 예시:

openjdk version "17.0.9" 2024-01-16
Ubuntu 서버에서 Docker를 설치하고 실행할 수 있도록 설정하는 과정입니다.
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
🚀 설정 적용 방법
newgrp docker✅ 설치 후 확인
docker --version
출력 예시:
Docker version 24.0.5, build ced0996
Jenkins 데이터를 유지하려면 Docker 볼륨을 사용하는 것이 가장 좋습니다.
docker volume create jenkins_home
✅ Jenkins 컨테이너 실행 (Docker 볼륨 방식)

docker run -d \
--name jenkins \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts
Docker 볼륨이 아니라 EC2 내 로컬 디렉토리를 사용하고 싶다면:
mkdir -p ~/jenkins_home
chmod 777 ~/jenkins_home
✅ Jenkins 컨테이너 실행 (로컬 디렉토리 방식)
docker run -d \
--name jenkins \
-p 8080:8080 -p 50000:50000 \
-v ~/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts
✅ 실행 중인 Jenkins 컨테이너 확인
먼저 실행 중인 Jenkins 컨테이너가 있는지 확인하세요.
docker ps | grep jenkins
출력 예시:
b2345c8a9b2f jenkins/jenkins:lts "/sbin/tini -- /usr/..." Up 2 minutes 8080/tcp, 50000/tcp jenkins
여기서 jenkins 컨테이너가 정상적으로 실행 중인지 확인합니다.
✅ 컨테이너 내부에 접근 (Bash 쉘 실행)
docker exec -it jenkins bash
it → 인터랙티브 모드로 실행jenkins → 컨테이너 이름bash → Bash 셸을 실행🚀 이제 Jenkins 컨테이너 내부로 접속되었습니다!
✅ Jenkins 초기 비밀번호 확인
컨테이너 내부에서 아래 명령어를 실행하세요.
cat /var/jenkins_home/secrets/initialAdminPassword
출력 예시:
615fe9574f824b92868f0a7a4d922956
📌 이 비밀번호를 복사해서 http://your-ec2-public-ip:8080에서 Jenkins 로그인 화면에 입력하면 됩니다.
✅ 컨테이너에서 빠져나오기
비밀번호를 확인한 후, 컨테이너에서 나가려면 아래 명령어를 입력하세요.
exit
이제 다시 EC2 터미널로 돌아옵니다. 🚀
docker ps | grep jenkinsdocker exec -it jenkins bashcat /var/jenkins_home/secrets/initialAdminPasswordexit🔹 웹 UI 접속
http://your-ec2-public-ip:8080 접속정리
| 단계 | 명령어 |
|---|---|
| 1. OpenJDK 17 설치 | sudo apt install -y openjdk-17-jdk |
| 2. Docker 설치 | sudo apt install -y docker.io |
| 3. Docker 서비스 시작 | sudo systemctl start docker |
| 4. 서버 재부팅 시 자동 실행 설정 | sudo systemctl enable docker |
5. 사용자 권한 추가 (sudo 없이 Docker 사용) | sudo usermod -aG docker $USER |
| 6. 설정 적용 | newgrp docker 또는 로그아웃 후 재접속 |
| 7. Docker 볼륨 생성 (Jenkins 데이터 유지) | docker volume create jenkins_home |
| 8. Jenkins 컨테이너 실행 (볼륨 방식) | docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home ... |
| 9. Jenkins 초기 비밀번호 확인 | sudo cat /var/jenkins_home/secrets/initialAdminPassword |
| 10. 웹 UI 접속 | http://your-ec2-public-ip:8080 |
이제 Jenkins가 EC2에서 Docker 컨테이너로 실행됩니다
Jenkins에서 GitHub 저장소의 Jenkinsfile을 읽어와 Test → Build → Docker 이미지 Push까지 수행하는 파이프라인을 구축합니다.
GitHub과의 원활한 연동을 위해 아래 플러그인을 설치합니다.
http://your-jenkins-public-ip:8080설치 후 Jenkins 재시작 (sudo systemctl restart jenkins)
GitHub에서 코드가 푸시될 때 Jenkins가 자동으로 빌드를 수행하도록 Webhook을 설정합니다.
GitHub Repository 이동 → Settings → Webhooks
Webhook 추가
http://your-jenkins-public-ip:8080/github-webhook/application/jsonJust the push eventWebhook 생성 후 테스트
curl -X POST -H "Content-Type: application/json" -d '{}' http://your-jenkins-public-ip:8080/github-webhook/
✅ 이제 GitHub에 새로운 코드가 푸시될 때 Jenkins가 자동으로 빌드를 시작합니다!
Jenkins가 Docker 이미지를 빌드하고, AWS ECR에 Push할 수 있도록 설정합니다.
AWS CLI를 설치하고 Jenkins 서버에서 ECR에 접근할 수 있도록 설정합니다.
sudo apt update
sudo apt install -y awscli
aws configure
✅ 설정할 정보:
ap-northeast-2jsonECR에서 Jenkins가 푸시할 Docker 이미지 저장소를 생성합니다.
aws ecr create-repository --repository-name my-jenkins-image
✅ 생성된 ECR URL 확인
aws ecr describe-repositories --query "repositories[0].repositoryUri" --output text
출력 예시:
123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-jenkins-image
AWS ECR에 접속할 수 있도록 Jenkins에 AWS 인증 정보를 추가해야 합니다.

Manage Jenkins → Manage CredentialsGlobal Credentials에서 Add CredentialsAWS Credentialsaws-jenkinsAWS ECR Access for Jenkins✅ 이제 Jenkins가 AWS ECR에 인증하여 이미지를 Push할 수 있습니다.
Jenkins에서 Pipeline Job을 생성하여 GitHub의 Jenkinsfile을 읽어와 빌드합니다.
GitHub-CI-CD-Pipeline)GitHub project 체크 후 GitHub Repository URL 입력https://github.com/your-username/your-repo.gitGitHub hook trigger for GITScm polling 체크Pipeline script from SCM 선택Githttps://github.com/your-username/your-repo.gitmain 또는 빌드할 브랜치 입력JenkinsfileBuild Now 클릭)✅ 이제 GitHub 저장소의 Jenkinsfile을 읽어와 실행됩니다.
GitHub 저장소에 Jenkinsfile을 작성하여 Jenkins가 읽어오도록 합니다.
📌 Jenkinsfile 예제
pipeline {
agent any
environment {
AWS_REGION = "ap-northeast-2"
AWS_ACCOUNT_ID = "123456789012"
ECR_REPO = "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/my-jenkins-image"
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/your-username/your-repo.git'
}
}
stage('Test') {
steps {
sh 'echo "Running tests..."'
sh 'sleep 3' // 실제 테스트 명령어로 변경
}
}
stage('Build Docker Image') {
steps {
script {
sh "docker build -t ${ECR_REPO}:latest ."
}
}
}
stage('Login to AWS ECR') {
steps {
script {
sh "aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ECR_REPO}"
}
}
}
stage('Push Docker Image') {
steps {
script {
sh "docker push ${ECR_REPO}:latest"
}
}
}
}
}
✅ Jenkinsfile 주요 구성
Jenkins UI에서 "Build Now" 실행
빌드 성공 여부 확인
Console Output에서 docker push 성공 여부 확인AWS ECR에서 이미지 확인
aws ecr list-images --repository-name my-jenkins-image
✅ 정상적으로 등록되었는지 확인 후, CI/CD 파이프라인 완료! 🎯
| 작업 내용 | 확인 방법 |
|---|---|
| Jenkins 플러그인 설치 | Plugin Manager에서 확인 |
| GitHub Webhook 설정 | Webhook 테스트 (curl) |
| AWS CLI & ECR 설정 | aws ecr describe-repositories |
| Jenkins Credentials 설정 | Manage Credentials 확인 |
| Jenkins Pipeline 생성 | New Item → Pipeline 생성 |
| GitHub에 Jenkinsfile 추가 | git push 확인 |
| 빌드 실행 및 확인 | Jenkins UI에서 빌드 성공 여부 확인 |
| ECR에서 Docker 이미지 확인 | aws ecr list-images |
이제 GitHub에 새로운 코드가 푸시될 때마다, Jenkins가 자동으로 실행되어 Test → Build → Docker 이미지 생성 → AWS ECR에 Push까지 자동화됩니다! 🎯