오늘은 도커에 젠킨스를 설치하겠습니다.
하지만 프리티어 인스턴스는 t2.micro를 사용하고 메모리가 1GB로 작습니다.
그래서 젠킨스나 스프링을 EC2서버에 올리게 되면 서버가 다운될 확률이 높습니다. 따라서 스왑 메모리를 설정한 후 젠킨스를 설치하겠습니다.
Swap Memory
실제 메모리가 가득 찼는데 더 많은 메모리가 필요로 할 때, 하드디스크의 공간을 가상 메모리로 대체하여 사용하는 것을 의미합니다.
실제 메모리보다는 속도가 느리지만, 시스템이 다운되거나 장애를 발생시키는 것 보다는 스왑 메모리를 활용하여 안정성을 높일 수 있는 방법입니다.
1. 용량 확인
df -h
보면 주요 용량 디스크 /dec/root 에 디스크용량 6.8G에 사용중 용량 3.5G 남아있는 용량 3.3G 남아있다.
2. 현재 스왑 메모리를 사용하는지 확인
free
스왑 영역은 0으로 사용하고 있지 않다. 따라서 스왑 메모리를 올려서 서버가 다운되지 않도록 해보겠습니다.
3. 'swapfile'이름으로 스왑 메모리 2GB 생성
sudo fallocate -l 2G /swapfile
4. 파일의 권한을 600으로 수정
sudo chmod 600 /swapfile
권한 600은 root 계정만 읽기/쓰기가 가능하다는 의미입니다.
5. 생성한 swapfile로 Swap Memory활성화
sudo mkswap /swapfile
sudo swapon /swapfile
6. 서버가 재부팅 되어도 Swap Memory 적용
sudo vi /etc/fstab
...
/swapfile swap swap defaults 0 0
...
/swapfile swap swap defaults 0 0을 입력후 저장 종료시키려면 esc를 누르고 :wq를 누르고 엔터를 누르면 저장 종료가 된다.
7. 마지막으로 free명령어를 통해 Swap Memory가 잘 적용되었는지 확인
free
젠킨스 설치
이제 스왑메모리 설치가 잘 되었으니 젠킨스를 설치해보자.
1. 젠킨스 이미지 다운
docker image pull jenkins/jenkins:jdk17
2. 컨테이너에 올리기
docker run -d -v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8088:8080 -p 50000:50000 \
--restart=on-failure \
-e TZ=Asia/Seoul \
--name jenkins-server jenkins/jenkins:jdk17
- docker run: Docker 컨테이너를 생성하고 실행하는 명령어입니다.
- -d: 컨테이너를 백그라운드에서 (detached) 실행하도록 설정합니다. 이렇게 하면 터미널을 계속 점유하지 않고 실행됩니다.
- -v jenkins_home:/var/jenkins_home:
- -v는 볼륨을 연결할 때 사용됩니다.
- jenkins_home이라는 Docker 볼륨을 Jenkins 컨테이너의 /var/jenkins_home 디렉터리에 마운트하여, Jenkins의 데이터가 호스트에서 영구적으로 저장되도록 합니다. 이로 인해 컨테이너를 삭제해도 jenkins_home에 있는 데이터는 유지됩니다.
- Mount를 하지 않을 경우 Docker내부에서 발생된 데이터는 Docker내부에 저장되기 때문에 Docker가 삭제되면 해당 데이터가 같이 삭제된다. 따라서 Docker내부에 저장된 데이터값을 삭제되지 않게하기위해 어딘가에 보관하기 위해 설정한다. Docker가 실행되는 외부에 해당하는 폴더 경로(/var/jenkins_home)를 연결해서 Link를 연결하는 작업이다.
- -v /var/run/docker.sock:/var/run/docker.sock:
- Docker의 소켓 파일을 Jenkins 컨테이너에 마운트합니다.
- 이를 통해 Jenkins 컨테이너가 Docker 데몬에 접근할 수 있어, Jenkins에서 다른 Docker 컨테이너를 제어할 수 있습니다. (Docker in docker를 구현하기 위해 사용하는 옵션)
- -p 8088:8080:
- 호스트의 포트 8088을 컨테이너의 포트 8080에 매핑하여, 호스트의 8088 포트로 접근하면 Jenkins의 기본 웹 인터페이스(8080)에 접속할 수 있습니다.
- -p 50000:50000:
- 호스트의 포트 50000을 컨테이너의 포트 50000에 매핑하여, Jenkins의 에이전트 통신 포트로 사용됩니다. 이 포트는 Jenkins 마스터와 에이전트 간의 연결에 사용됩니다.
- --restart=on-failure:
- 컨테이너가 비정상적으로 종료될 때 자동으로 재시작하도록 설정합니다. 정상적인 종료는 재시작하지 않지만, 오류 발생 시 재시작이 됩니다.
- -e TZ=Asia/Seoul:
- -e 옵션을 사용하여 환경 변수를 설정합니다. 여기서는 TZ라는 환경 변수를 Asia/Seoul로 설정하여 컨테이너의 시간대를 한국 시간(Asia/Seoul)으로 맞춥니다.
- --name jenkins-server:
- 컨테이너의 이름을 jenkins-server로 지정하여, 이후에 해당 이름으로 컨테이너를 쉽게 제어할 수 있도록 합니다.(설정하지 않으면 Docker가 랜덤하게 생성합니다. 따라서 이름을 부여하는것을 권장합니다.)
- jenkins/jenkins:jdk17:
- 사용할 이미지의 이름과 태그입니다. 여기서는 jenkins/jenkins 이미지의 jdk17 버전을 사용하여 Jenkins를 실행합니다.
3. 컨테이너 확인
docker ps
젠킨스 초기 설정
젠킨스는 ip:port로 들어가면 되는데, AWS의 경우는 [퍼블릭 IPv4주소] :port를 입력합니다.
이 때, 인바운드 규칙에서 해당 포트를 열지 않으면 접속이 되지 않으므로 해당 포트를 열어주고 주소에 들어갑니다.
1. 젠킨스 인바운드 규칙 추가
2. 비밀번호 입력
이제 사이트에 접속합니다. [퍼블릭 IPv4주소]:8088
이 비밀번호는 다음 명령어를 통해 알 수 있습니다.
docker logs jenkins-server
뒤에 jenkins-server는 컨테이너 id를 의미합니다.
3. 플러그인 설치
플러그인은 모두 설치해주도록 합니다.
중간 중간 설치가 안될수 있는데 Retry하시면 됩니다.!
4. 어드민 유저 생성
어드민 유저를 생성해줍니다. 저는 제가 사용하는 이메일/비밀번호를 사용했습니다.
5. URL 설정
접속하고자 하는 URL을 생성합니다. 자동적으로 입력되어있습니다.
6. 완료
이렇게 하면 완료가 됩니다!
'프로젝트 > WMS' 카테고리의 다른 글
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (6) (0) | 2024.11.07 |
---|---|
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (5) (0) | 2024.11.07 |
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (3) (3) | 2024.11.05 |
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (2) (0) | 2024.11.04 |
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (1) (1) | 2024.11.04 |