서론
- 이번 글에서는 EC2 Ubuntu 인스턴스에 Jenkins를 설치하고 설정하는 방법을 단계별로 정리해보겠습니다.
1. EC2 인스턴스 생성 및 Java 설치
1) EC2 인스턴스 생성
- AWS EC2에서
Ubuntu
인스턴스를 선택해줍니다. jar
및Docker Image
빌드를 위해 저장공간은 10GB 이상으로 설정해줍니다.- Public Subnet 에 배치하여 외부 접속이 가능하도록 설정합니다.
2) Java 설치
- Jenkins는
Java
기반으로 동작하기 때문에 Java 설치가 필요합니다. - 아래 명령어로 Java를 설치해줍니다.
설치 명령어
sudo apt update
sudo apt install fontconfig openjdk-17-jre
java -version
- 설치가 성공적으로 완료되면 다음과 같은 출력이 나타납니다.
openjdk version "17.0.13" 2024-10-15 OpenJDK Runtime Environment (build 17.0.13+11-Ubuntu-2ubuntu124.04) OpenJDK 64-Bit Server VM (build 17.0.13+11-Ubuntu-2ubuntu124.04, mixed mode, sharing)
2.Jenkins 설치
1) Jenkins 설치
- Ubuntu 용 Jenkins를 다음 명령어로 설치합니다.
- 자세한 내용은 Jekins 공식문서 를 참고해주세요!
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
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
sudo apt-get install jenkins
2)Jenkins 서비스 설정
- Jenkins를 부팅 시 자동 실행되도록 설정합니다.
sudo systemctl enable jenkins
Synchronizing state of jenkins.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable jenkins
3) Jenkins 실행 및 상태 확인
- Jenkins를 실행하고 상태를 확인합니다.
sudo systemctl start jenkins
sudo systemctl status jenkins
- 다음과같이 나오면 성공입니다.
3. Jenkins 초기 설정
1) Jenkins 접속
- EC2 IP와 8080 을 이용하여 접속해줍니다. (
http://<EC2_IP>:8080
)
- 접속을위해 초기 비밀번호가 필요합니다.
- 터미널을 열고 다음 명령어로 password 확인후 입력해줍니다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
2) Admin 계정 생성
- 초기 화면에서 Jenkins 어드민 계정을 생성해줍니다.
3) github 연결용 플러그인 추가
github
Repository
의push
이벤트를webkooking
할것이기 때문에 다음 플러그인들을 설치해줍니다.
Generic Webhook Trigger Plugin
GitHub Integration Plugin
GitHub API Plugin
4) (문제해결) Memory Swap 공간 만들기
jar
파일 build중 인스턴스가 멈추는현상이 발생하였습니다.- EC2 인스턴스의 메모리가 부족해서 생긴 현상으로, 단순히 Jenkins만 돌리는 상황에서도 메모리가 부족한것을 확인할 수 있었습니다.
- t2.micro 인스턴스에서 제공하는 메모리는 1GB 뿐이므로, gradle을 돌리기엔 메모리가 부족합니다.
- 이럴경우 보조기억장치를 Swap Memory로 활용해야합니다. 설정방법은 아래글을 참고해주세요!
2024.12.16 - [AWS/EC2] - [EC2] Ubuntu Swap Memory 설정으로 메모리 부족 문제 해결(EC2 멈춤 해결)
4. Github - Jenkins 연동
1) GitHub Access Token 생성
- Jenkins 가 github 에 접근할 수 있도록 access tokern 생성해줍니다.
- github 설정의 Develpoer setting -> Personal access tokens -> Generate new token(classic)을 클릭합니다.
repo
권한과repo_hook
권한을 선택해줍니다.
- 생성된 토큰을 복사합니다. 생성된 토큰은 다시 확인할 수 없으니 별도로 저장해야 합니다.
2) Jenkins Credentials
- docker 와 github 접근을 위한 권한을 생성해줍니다.
- Credentails 생성 페이지 접속
Jenkins 관리-> Credentials -> (global) ->add credentials
클릭하여 페이지로 접속합니다.
2) github credentials 생성
- Kind : username wity password 선택합니다.
- Scope : Global 선택합니다.
- UserName : github 계정명을 입력합니다.
- Password : 위에서 만든 github access 토큰을 입력합니다.
3) Github Repository Webhook 설정
- GitHub Repository에서 Settings > Webhooks로 이동한후 아래와 같이 셋팅해줍니다.
- Payload URL에 http://<Jenkins_URL>/github-webhook/ 형태로 입력해줍니다.
- Contnetn Type : application/json.
- Event Type :Just the push Event.
5. Docker Credentials 생성
- Jenkins에서 Docker Hub에 이미지를 푸시하기 위해 Docker Credentials를 생성합니다.
- Kind : username wity password 선택합니다.
- Scope : Global
- Username : Docker 가입된 이메일을 입력합니다.
- Password : Docker 비밀번호를 입력합니다.
4. AWS EC2 Auto Scaling Group 접근을 위한 셋팅
- 여기부터는 EC2 Auto Scaling Group 접근을 위한 셋팅방법입니다.
1) AWS CLI 다운로드
- Jenkins 인스턴스에서 AWS 접근하기위해 AWS CLI설치를 진행합니다.
- 보다 자세한 내용은 AWS 공식문서 를 확인해주세요!
- unszip 설치
- AWS CLI 설치를 위해
unzip
패키지가 필요합니다. 아래 명령어를 실행해 설치합니다.
sudo apt update
sudo apt install unzip -y
- AWS CLI 설치
- AWS CLI zip 파일을 다운받고 설치합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
- 설치 확인
- 설치후 버전을 확인하여, 정상적으로 설치되었는지 확인합니다.
aws --version aws-cli/2.22.17 Python/3.12.6 Linux/6.8.0-1019-aws exe/x86_64.ubuntu.24
2) IAM Role 생성
- Jenkins 인스턴스가 EC2 Auto Scaling Group에 접근할 수 있도록 IAM Role을 생성하고 설정합니다.
- IAM 역할 생성
- IAM -> 역할->역할생성 에서 AutoSaclingFullAccess를 추가해줍니다,
- Jekins 인스턴스 IAM 역할에 위에서 만들어둔 역할을 추가합니다.
결론
- 이번 글에서는 EC2 Ubuntu 인스턴스에 Jenkins를 설치하고 GitHub 및 Auto Scaling Group과 연동하는 방법을 살펴보았습니다. 이를 통해 Jenkins가 기본적인 CI/CD 환경을 지원할 준비를 마쳤습니다.
- 다음 글에서는 Jenkins 파이프라인을 구성하고, 실제로 애플리케이션을 빌드 및 배포하는 자동화 과정을 만들어보겠습니다.
'Jenkins' 카테고리의 다른 글
[Jenkins] 무중단 배포를 위한 CI/CD 파이프라인 구현 (1) - Jenkins, CI/CD 개념과 시스템 설계 (0) | 2024.12.24 |
---|---|
[Jenkins] Jenkins 빌드 상태를 Slack으로 자동 알림 보내기 (0) | 2024.12.19 |