::: IT인터넷 :::

시놀로지 NAS에 Jenkins 구축하기

곰탱이푸우 2021. 6. 23. 08:20

현재 근무 중인 회사에서는 빌드 및 배포 시스템으로 Atlassian의 Bamboo를 사용 중이다.

기능도 익숙하고 사용하기 편리하지만 상용 제품이다 보니 개인이나 소규모로 사용하기에는 부담이 있다.

 

구글링을 해보니 Jenkins가 Bamboo 못지 않은 기능을 제공한다고 하여 선택하게 되었다.

  • Bamboo가 상용이라 기술지원 받을 수 있다는 것을 제외하면 Jenkins가 더 낫다는 평이 많다.
  • Atlassian 제품이 특이한 점은 익숙해지면 상당히 편한데, 찾아보면 더 나은 대안이 항상 있다. (-_-;;)

 

조사해보니 Jenkins는 생각보다 긴 역사와 전통을 자랑한다.

  • 2004년 Sun Microsystems에서 자바 기반의 Hudson 오픈소스 프로젝트로 시작되었다.
  • 2009년에 Sun Microsystems가 Oracle에 인수되었고, 결국 2011년 Jenkins로 독립했다.
 

젠킨스란 무엇인가, CI(Continuous Integration) 서버의 이해

젠킨스(Jenkins)는 거의 모든 언어의 조합과 소스코드 리포지토리(Repository)에 대한 지속적인 통합과 지속적인 전달 환경을 구축하기 위한 간단한 방법을 제공한다.Credit: Getty Images Bank젠킨스는 다

www.itworld.co.kr

 

Jenkins를 설치한 이유는 파이썬 Wheel과 Visual Studio exe 바이너리 빌드 환경을 구성하는 것이었다.

  • Jenkins는 애초에 Java 빌드와 배포 목적으로 만들어졌다.
  • 오픈소스의 강력한 커뮤니티 덕분에, 현재는 1400여개의 플러그인으로 웬만한 빌드와 배포는 거의 다 가능하다.
  • 정작 Java (또는 Scala) 개발은 당분간 할 일이 없을 것 같다.

 

 

자료들을 찾아보니 Master - Slave 구조의 빌드 환경 구성은 공부를 더 해야 할 것 같다.

일단 Jenkins 기본 설치만 해놓고 답을 좀 찾아봐야겠다.

Docker로 Agent 구성은 가능한 것 같다.

 

Using Docker with Pipeline

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

시놀로지 Docker 앱에서 Jenkins/Jenkins Docker 이미지를 사용하면 된다.

설치 이후 메모리도 생각보다 많이 차지하지 않는다. (약 250MB 정도..)

 

Jenkins 관련 정보는 다음 사이트를 참고한다.

 

홈페이지

 

Jenkins

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

공식 문서

 

Jenkins User Documentation

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

다운로드

 

Jenkins download and deployment

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

 

Docker 설정

시놀로지 NAS에서 제공하는 Docker 앱에서 Jenkins/Jenkins 이미지를 사용하여 셋팅한다.

 

공유 볼륨 폴더 생성

시놀로지 Docker 이미지와 공유하기 위한 폴더 (볼륨)를 생성한다.

  • VMware나 VirtualBox의 폴더 공유와 동일한 개념이다.
  • 해당 Docker 컨테이너 내부에서 생성된 파일을 Docker 외부에서 확인할 수 있다.

 

적절한 경로에 사용할 폴더를 생성한다.

  • 다수의 Docker 컨테이너를 사용할 것이므로 최상위 경로에 docker 폴더를 생성했다.
  • docker 폴더 하위에 jenkins 폴더를  만들고, 실제 데이터가 저장 될 jenkins-data 폴더를 생성했다.

 

생성한 jenkins-data 폴더를 우클릭하여 '속성'을 선택한다.

권한 탭을 클릭하면 사용자 또는 그룹에 대해 해당 경로에 대한 권한을 부여할 수 있다.

 

생성 버튼을 클릭하면 권한 편집기가 나타난다.

  • 사용자 또는 그룹은 SYSTEM을 선택한다. (Docker 컨테이너는 SYSTEM 계정으로 실행된다.)
  • 읽기, 쓰기 부분의 체크박스를 선택하고 '확인'을 클릭한다.

 

SYSTEM 계정에 대해 해당 폴더에 대한 읽기 & 쓰기 권한이 부여된 것을 확인할 수 있다.

 

 

Jenkins Docker 이미지 다운로드

Docker 앱의 레지스트리 탭을 선택하고 jenkins로 검색하면 jenkins/jenkins Docker 이미지를 확인할 수 있다.

 

더블 클릭하고 latest 태그를 선택하고 '선택' 버튼을 누른다.

 

jenkins/jenkins:latest 이미지가 다운로드 되었다. 크기는 약 572MB이다.

 

 

Jenkins Docker 컨테이너 생성

해당 이미지를 더블클릭하면 컨테이너 생성 화면이 출력된다.

  • 컨테이너 이름은 사용하고자 하는 적절한 이름을 부여한다.
  • 그대로 사용해도 무방하다.

 

고급 설정 버튼을 클릭하면 상세 설정 화면으로 진입한다.

  • 자동 재시작 활성화에 체크한다.
  • NAS가 재부팅되거나, Docker 컨테이너가 비정상 종료 했을때 자동으로 재시작한다.

 

볼륨 탭을 선택하고 폴더 추가 버튼을 선택하여 미리 생성한 공유 폴더(볼륨)을 연결한다.

  • '폴더 추가' 버튼을 클릭하면 폴더를 선택할 수 있는 창이 출력된다.
  • 이전에 생성한 경로로 이동하여 선택한다.
  • '마운트 경로'는 직접 입력해야 한다. /var/jenkins_home을 입력한다.

 

포트 설정 탭을 선택하고 + 버튼을 클릭하여 컨테이너 외부로 연결할 포트를 입력한다.

  • 8080(컨테이터 포트)은 Jenkins의 웹 기본 도구에 사용하는 기본 포트이다.
  • SSL 연결을 위해 리버스 프록시로 연결하기 위해 5자리의 임의의 포트를 지정했다.
  • 40001은 Java API를 위한 포트이다.

 

 

모든 설정을 마치고 확인 버튼을 누르면 아래와 같이 컨테이너가 생성 된 것을 확인할 수 있다.

  • CPU 점유율은 0.5% 이내로 안정적이다. (최초 실행시 40% 정도 점유하다 2~3분 내에 1% 이내로 줄어든다.)
  • RAM은 250~300MB 정도 점유한다. NAS에 기본 탑재 된 2G 램으로도 가능하지만, 가급적 NAS 램은 추가를 적극 권장한다.

 

해당 컨테이너를 더블 클릭하면 상세 정보를 확인할 수 있다.

  • 프로세스 탭은 컨테이너 내부에서 실행 중인 프로세스 목록을 확인할 수 있다.
  • 터미널 탭은 해당 컨테이너 내부의 실행 상태(로그) 확인과 쉘 (Bash)을 통한 명령 전달이 가능하다.

 

참고사항

위의 내용은 시놀로지 Docker 앱에 특화 된 내용이지만, 일반 Docker를 이용해서도 가능하다.

$ docker pull jenkins/jenkins:latest
$ docker run -d -p 8080:8080 -p 50000:50000 \
  --name jenkins-jenkins1 -v /home/your_account/jenkins-data:/var/jenkins_home jenkins/jenkins

 

 

SSL 설정 (리버스프록시)

아래 내용은 시놀로지 NAS로 설정하는 경우에만 해당한다.

  • 별도의 SSL 인증서 설정 없이 NAS에서 제공하는 리버스프록시 기능을 사용한다. (아주 간편하다.)
  • 특정 HTTPS 프로토콜을 Docker 컨테이너의 HTTP 프로토콜로 연결한다.
  • NAS 외부에서 특정 Docker 컨테이너에 HTTPS 프로토콜을 이용하여 접근할 수 있다.
  • 해당 NAS 도메인에 대한 SSL 인증서가 적용된 상태가 유지된다.

 

시놀로지 NAS에 SSL 인증서 적용하는 방법은 아래 글을 참고한다.

 

시놀로지 NAS Let's Encrypt 인증서 발급 받기

개요 Let's Encrypt 사용 계기 원래는 Nexus, GitLab, 인증서 순으로 작성하려고 했는데, 정리 순서가 반대로 되어 있어 인증서부터 작성한다. 시놀로지 NAS를 이용한 인증서 발급 자동 갱신 방법 3월부터

www.bearpooh.com

 

리버스프록시 설정을 위해 시놀로지 NAS의 제어판을 실행하고, 우측 상단의 '고급 모드'를 클릭한다.

 

제일 하단의 '응용 프로그램' 탭의 '응용 프로그램 포털'을 실행한다.

 

 

'역방향 프록시' 탭을 선택하고 생성 버튼을 클릭하여 포트를 연결한다.

  • 설명은 해당 규칙의 이름을 의미한다. jenkins 관련 규칙이므로 jenkins-test로 지정했다.
  • 소스는 NAS 외부에서 사용할 프로토콜과 포트이다.
  • 대상은 NAS 내부에서 연결할 대상이다.

 

정리하면 외부에서 특정 프로토콜과 포트로 접근하면 지정한 프로토콜과 포트로 전달하는 기능이다.

 

위의 설정을 완료하고 브라우저에서 https://도메인:소스포트 를 입력하면 아래와 같은 화면을 볼 수 있다.

  • 도메인이 test.com 이고
  • 리버스프록시 설정에서 정의한 소스포트가 8888이면
  • Nexus3의 접근 주소는 https://test.com:8888 이다.

 

상세 도메인과 포트가 공개 되면 외부 공격에 취약할 수 있기 때문에, 비식별화를 적용함을 양해 부탁드린다.

 

초기 설정 과정은 다음 포스팅을 참고한다. 

 

Jenkins 설치 후 초기 설정

시놀로지 NAS에서 Docker를 이용한 Jenkins 설치는 아래 포스팅을 참고한다. https://www.bearpooh.com/49 Jenkins 접속 및 비밀번호 설정 Docker를 이용하여 Jenkins 설치를 마치고 접속하면 아래와 같은 초기 설..

www.bearpooh.com