SY 개발일지
article thumbnail

이번에는 CI/CD를 위해 도커에 젠킨스를 설치해보도록 하겠습니다.

 

젠킨스는 간단히 말해 CI/CD를 위한 오픈 소스 도구로 소프트웨어 개발 생명주기를 자동화해줍니다.

예를 들어 우리가 깃허브에 깃을 커밋하면, 이를 감지하여 배포까지 해줍니다 !! 아주 편리한 도구라고 할 수 있는데 한번 다운받아 보도록 하겠습니다.

 

근데 그 전에 ! 우리의 AWS 프리티어 EC2는 메모리가 작습니다. 그래서 메모리를 많이 사용하는 젠킨스를 그냥 설치하면 서버가 다운될 확률이 아주 높습니다.(만약 서버가 다운되었으면 인스턴스를 재부팅해주면 됩니다)

그래서 먼저 스왑 메모리를 설정한 후 젠킨스를 설치해주도록 하겠습니다.

 

스왑메모리 설정

스왑 메모리란 실제 메모리가 가득 찼는데 더 많은 메모리가 필요로 할 때, 하드디스크의 공간을 가상 메모리로 대체하여 사용하는 것을 의미합니다. 실제 메모리보단 속도가 느리지만, 시스템이 다운되거나 장애를 발생시키는 것보다 스왑 메모리를 활용하여 안정성을 높일 수 있습니다.

 

용량이 얼마나 남아있는지 확인

df -h

 

현재 스왑메모리를 사용하고 있는지 확인

free

스왑 영역이 보이지 않거나 0이라면 사용하고 있지 않다는 것을 의미한다.

'swapfile'이라는 이름으로 스왑 메모리를 2GB 생성

sudo fallocate -l 2G /swapfile

파일의 권한을 600으로 수정

sudo chmod 600 /swapfile

참고) 600은 root 계정만 읽기/쓰기가 가능하다는 의미이다.

생성한 swapfile로 Swap Memory를 활성화

sudo mkswap /swapfile
sudo swapon /swapfile

서버가 재부팅 되어도 Swap Memory 적용

sudo vi /etc/fstab

...

/swapfile swap swap defaults 0 0

...

위 내용을 파일에 추가해준다.

Swap Memory가 적용되었는지 확인

free

 

 

젠킨스 설치

이제 메모리도 설정했고, 본격적으로 젠킨스를 설치해주도록 하겠습니다.

 

젠킨스 이미지 다운

docker image pull jenkins/jenkins:jdk17

컨테이너 올리기

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

 

run : 도커에서 image를 생성하는 커맨드

-p : publish 옵션 컨테이너 내부 포트를 컨테이너 바깥 서버에서 어떻게 접속해서 사용할것인지 나타내는 설정

  1. 컨테이너 바깥에서 8088(기본값 8080)이라는 포트를 사용하여 접속하면 컨테이너 내부로 8080으로 접속
  2. 컨테이너 외부에서 50000을 호출하면 컨테이너 내부에서 50000으로 응답

--restart=on-failure : faile했을 경우 restart한다.

-v jenkins_home:/var/jenkins_home : 

  • -v : Volune  로컬에서 사용하는 Docker의 실행 환경에서 어떠한 디렉토리와 Docker에 있는 디렉토리와 Mount(연결)작업을 할것인지에 대한 설정
  • Mount를 하지 않을 경우 Docker내부에서 발생된 데이터는 Docker내부에 저장되기 때문에 Docker가 삭제되면 해당 데이터가 같이 삭제됩니다. 따라서 Docker내부에 저장된 데이터값을 삭제되지 않게하기위해 어딘가에 보관하기 위해 설정합니다. Docker가 실행되는 외부에 해당하는 폴더 경로(/var/jenkins_home)를 연결해서 Link를 연결하는 작업입니다.

-v /var/run/docker.sock:/var/run/docker.sock : 

  • docker in docker를 구현하기 위해 사용하는 옵션

jenkins/jenkins:lts-jdk11 : docker에서 사용하는 jenkins계정 이름 / repository 이름

lts-jdk11 : 사용하려는 tag이름

 

--name jenkins-server : 만들고자 하는 컨테이너에 이름을  jenkins-server로 부여

부여하지 않으면 Docker가 랜덤하게 이름을 생성합니다.

(Random한 이름만 놓고 봤을 때 해당하는 컨테이너가 무엇인지 알수 없다는 뜻이므로 이름을 부여하는것을 권장합니다.)

 

컨테이너 확인

docker ps

잘 올라간 것을 확인할 수 있습니다.

 

젠킨스 초기 설정

먼저, 젠킨스에 접속해보도록 하겠습니다. ip:port로 들어가면되는데, AWS의 경우에는 [퍼블릭 IPv4 주소]:PORT를 입력합니다.

이 때, 인바운드 규칙에서 해당 포트를 열지 않으면 접속이 되지 않으므로 해당 포트를 열어주고 주소에 들어갑니다.

 

저는 다음과 같이 설정해주었습니다.

인바운드 규칙 추가

 

 

비밀번호 입력

이제 사이트에 접속해보도록 합시다. 처음 접속하면 비밀번호를 입력하라는 창이 뜹니다. 

이 비밀번호는 다음 명령어를 통해 알 수 있습니다.

docker logs {container_id}

 

플러그인 설치

다음으로 플러그인 설치 페이지가 뜨는데 저는 기본적으로 추천하는 플러그인을 모두 설치해주도록 하겠습니다.

 

설치되는중 ...

 

어드민 유저 생성

어드민 유저를 생성해줍니다. 저는 자주 사용하는 이메일/비밀번호를 사용해주었습니다.

 

URL 설정

젠킨스 URL을 설정해줍니다. 자동적으로 입력되어 있습니다.

 

완료

이렇게까지 하면 젠킨스의 기초적인 설치는 끝났습니다 !!

 

이제 다음 포스팅부터는 본격적으로 백엔드와 프론트엔드를 배포해보도록 하겠습니다.

 


 

젠킨스 플러그인 설치 안되는 오류는 다음 포스팅을 확인해주세요🤗

https://soyeonnnb.tistory.com/134

 

[CI/CD 트러블 슈팅] 젠킨스 플러그인 설치하기

저의 경우에는 항상 ..! 젠킨스 플러그인이 한번에 다운로드가 되지 않았습니다. 몇번 더 retry 하다가도 실패하면 수동으로 설치해주어야 합니다. 젠킨스 Dashboard > Jenkins 관리 > Plugins > Installed pl

soyeonnnb.tistory.com

 

 

 

 

 

참고

 

Docker 컨테이너로 Jenkins 설치 및 실행

1. Docker에 Jenkins 이미지 다운로드 docker pull jenkins/jenkins CMD 명령프롬프트에 위 명령어를 입력한다. jenkins/jenkins의 앞의 내용은 만들고자 하는 계정 뒤의 내용은 Repository의 이름이다. jenkins계정의 je

u-it.tistory.com

 

Swap Memory로 메모리 문제 해결하기

젠킨스를 구축하는 과정에서 빌드를 끝마치지 못하고 서버가 죽어버리는 현상이 발생했다. 처음에는 무슨 문제인지 인지하지 못하였고 서버를 껐다 켜보기만을 반복하였다. Gradle 빌드의 문제

hellorennon.tistory.com

 

profile

SY 개발일지

@SY 키키

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!