반응형
이번에는 EC2에서 Docker를 띄운 후 Jenkins를 구축해 보자
1. EC2 인스턴스에 SSH 접속
- AWS 콘솔에서 EC2 인스턴스의 IP 주소를 확인한 후, 터미널을 열고 SSH로 접속한다.
- 아래의 방법을 통해 Termius로 접속할수도 있다.
2023.10.25 - [AWS] - AWS - EC2 생성과 Termius 접속방법
2. 패키지 업데이트와 Docker 설치
2-1. 먼저 패키지 업데이트를 진행한다.
sudo apt-get update
2-2. Docker 설치에 필요한 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
2-3. Docker 공식 GPG 키 추가하기
- GPG키란?
- GPG(GnuPG, GNU Privacy Guard)는 데이터 암호화와 디지털 서명을 위한 도구이다.
- 이는 PGP(Pretty Good Privacy)의 자유 소프트웨어 구현으로, 공개 키 암호화를 사용한다.
- GPG 키 추가의 목적
- 신뢰성: GPG 키를 통해 다운로드한 패키지가 실제로 Docker에서 배포한 것이라는 것을 검증할 수 있다.
- 무결성: 패키지가 전송 중에 손상되거나 변경되지 않았음을 확인한다.
- 보안: 악의적인 소프트웨어나 위조된 패키지의 설치를 방지한다.
- GPG키를 꼭 추가해야 하는가?
- 보안과 신뢰성을 유지하기 위해서는 GPG 키를 추가하는 것이 좋다. 만약 이 단계를 생략한다면, 패키지의 신뢰성을 보장할 수 없으므로 보안 문제가 발생할 가능성이 있다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- GPG키를 추가하던 도중 경고 메시지가 발생했다.
- 아래처럼 마지막에 "OK"라고 뜨면 GPG 키가 성공적으로 추가된 것이다. 그러나 "apt-key is deprecated"라는 경고 메시지가 나타나고 있다. 이는 apt-key 명령이 더 이상 권장되지 않고 곧 사용이 중단될 예정이라는 것을 의미한다.
2-4. Docker 레포지토리 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
- 명령어를 치고나면 진행도중 아래와 같이 메시지가 나오는데 enter를 클릭하면 계속 진행한다.
2-5. 패키지 업데이트 및 Docker 설치
sudo apt-get update
sudo apt-get install docker-ce
- 아래 사진과 같이 동작하면 완료다. Done표시가 나온다.
2-6. 설치한 Docker 서비스 시작 및 확인
# Docker 서비스 시작
sudo systemctl start docker
# Docker 서비스 상태 확인
sudo systemctl status docker
- 아래와 같이 나올것이다.
3. Jenkins 설치 (Docker 이용)
3-1. LTS(Long Term Support) 버전의 Jenkins Docker 이미지를 다운로드한다.
# Jenkins 이미지 다운로드
sudo docker pull jenkins/jenkins:lts
3-2. Jenkins 컨테이너 실행하기
- d: 백그라운드에서 실행한다.
- p 8080:8080 -p 50000:50000: 포트를 매핑한다.
- v jenkins_home:/var/jenkins_home: 볼륨을 설정하여 데이터를 영구적으로 저장한다.
# Jenkins 컨테이너 실행
sudo docker run -d -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins:lts
- -p 50000:50000 는 어떤 의미로 작성된 것일까?
- 50000:50000 포트는 Jenkins 마스터와 에이전트 노드 간의 통신을 위한 것이다. 이 포트는 Jenkins의 분산 빌드 환경에서 중요한 역할을 한다. 분산 빌드 환경이란, 하나의 마스터 서버와 하나 이상의 에이전트 노드를 사용하여 빌드와 테스트 작업을 병렬로 수행하는 구성을 말한다.
- 상세한 역할
- 작업 할당: 마스터는 이 포트를 통해 에이전트 노드에 빌드나 테스트 작업을 할당한다.
- 작업 실행: 에이전트 노드는 할당받은 작업을 수행하고, 그 결과를 다시 이 포트를 통해 마스터에게 전달한다.
- 상태 모니터링: 마스터는 이 포트를 통해 에이전트 노드의 상태를 확인하고, 필요한 경우 작업을 재할당할 수 있다.
- 필수성과 선택성
- 단일 마스터 환경:
- 단일 Jenkins 마스터만을 사용하고, 별도의 에이전트 노드를 사용하지 않는 경우에는 이 포트를 열어둘 필요가 없다.
- 분산 빌드 환경:
- 여러 개의 에이전트 노드를 사용하여 작업을 분산시키는 경우에는 이 포트가 열려 있어야 마스터와 에이전트 간의 통신이 원활하게 이루어진다.
- 여러 개의 에이전트 노드를 사용하여 작업을 분산시키는 경우에는 이 포트가 열려 있어야 마스터와 에이전트 간의 통신이 원활하게 이루어진다.
- 단일 마스터 환경:
- 보안 측면
- 이 포트는 내부 네트워크에서만 열어두는 것이 일반적이다. 외부에 노출되면 보안 문제가 발생할 수 있으므로, 방화벽 등의 보안 설정을 통해 외부 접근을 차단해야 한다.
- 50000:50000 포트는 Jenkins 마스터와 에이전트 노드 간의 통신을 위한 것이다. 이 포트는 Jenkins의 분산 빌드 환경에서 중요한 역할을 한다. 분산 빌드 환경이란, 하나의 마스터 서버와 하나 이상의 에이전트 노드를 사용하여 빌드와 테스트 작업을 병렬로 수행하는 구성을 말한다.
3-3. Jenkins 접속 후 초기 설정
- 브라우저에서 http://<EC2_IP_ADDRESS>:8080으로 접속한다. (젠킨스 웹페이지 접속)
- 여기서 aws의 인바운드 규칙에서 8080포트를 열어줘야만 접속이 가능하다.
- 인바운드를 열어주고 다시 접속하면 아래와 같은 설정 페이지가 나올것이다.
- 여기서 form에 적을 unlock key를 얻기 위해 터미널에서 다음 명령어를 실행하자
sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 명령어 맨앞에 sudo를 안붙이면 아래와 같은 permission에러가 발생한다.
- sudo를 붙여서 정상적으로 동작시키면 아래와 같이 key값이 나올것이다.
이제 웹 페이지의 입력 form에 발급받은 unlock key를 입력하고, 초기 설정을 완료한다.
4. Jenkins 웹페이지 세팅
4-1. 플러그인 선택
- key를 입력하고 다음 단계로 넘어가면 plugins 설치가 나오는데 추천 플러그인을 선택하고 넘어갔다.
- Install suggested plugins를 선택하면 아래와 같이 다운로드와 설치를 진행한다.
4-2. Admin User 세팅
- 위의 플러그인 설치를 완료하면 아래와 같이 Admin유저를 세팅하는 창이 나온다.
4-3. domain 세팅
- 계정정보를 적어서 저장하고 넘어가면 다음과 같이 나온다. 이 페이지는 Jenkins 접속 url을 설정하는 곳이다. 구매해서 설정한 domain이 없으니 그냥 aws ec2 서버를 그대로 적어주면 된다.
4-4. 최종 설정화면
4-5. Jenkins Dashboad
- "Start using Jenkins" 버튼을 누르면 아래와 같이 Dashboard가 나올것이다.
여기까지가 Aws(Ec2)안에 Docker를 띄우고 그 위에 Jenkins 컨테이너를 올려서 설정까지 한 내용이다.
다음 포스트에서는 Freestyle 방식으로 CI만 구축하는 방법을 설명하겠다.
2023.10.26 - [DevOps] - Jenkins로 시작하는 CI: Freestyle 프로젝트 구축 가이드
2023.10.25 - [AWS] - AWS - EC2 생성과 Termius 접속방법
반응형
'DevOps' 카테고리의 다른 글
단일 장애 지점(SPOF)이란? (0) | 2023.11.21 |
---|---|
ECR Docker 이미지 Push 오류: M1 아키텍처와 exec format 문제 (0) | 2023.10.28 |
Pipeline 방식으로 Jenkins구축 - SpringBoot CI/CD 구축 (0) | 2023.10.27 |
Jenkins로 시작하는 CI: Freestyle 프로젝트 구축 가이드 (2) | 2023.10.26 |