본문 바로가기
IT/QA

Jenkins, Docker-compose로 컨테이너화 하기

by Cyber_ 2024. 12. 3.

Jenkins

젠킨스는 Java기반의 소프트웨어 개발 시 지속적으로 탕합 서비스를 제공하는 툴입니다. CI(continuous Intergration) 툴이라고 표현합니다. 젠킨스와 같은 CI툴이 등장하기 전에는 소위 nightly-build라고 불리우는 개발자들이 당일 작성한 소스들의 커밋이 모드 끝난 심야대에 빌드가 타이머에 의해 집중적으로 진행되는 행위가 있었지만, CI 툴의 등장으로 빌드를 포함하여 서브버전, Git과 같은 버전관리 시스템과 연동하여 소스의 커밋을 감지하여 자동적 테스트가 포함한 빌드하도록 설정할 수 있게 되었습니다.

Jenkins를 사용함으로 써의 이점

  • 프로젝트 표준 컴파일 환경에서의 컴파일 오류 검출
  • 자동화 테스트 수행
  • 정적 코드 분석에 의한 코딩 규약 준수여부 체크
  • 프로파일링 툴을 이용한 소스 변경에 따른 성능 변화 감시
  • 결합 테스트 환경에 대한 배포작업

유용한 기능

  • 각종 배치 작업의 간략화
  • 자동화 테스트
  • 코드 표준 준수여부 검사
  • 빌드 파이프라인 구성

Jenkins의 3가지 주요 요소

  1. Jenkins Master Node(Server)
    Jenkins의 서버이자 Master node는 Jenkins Pipeline으로 정의된 모든 흐름을 관장하는 컨트롤 서버입니다. Jenkins Slave(Agent)들에게 각각의 할 일을 정해주고 분배합니다.
  2. Jenkins Agent Nodes/Clouds
    Jankins Agent는 Jenkins Master Node가 작업의 명령을 수행합니다. Agent 없이 Master만으로 작업을 실행할 수 있지만 작업들이 서로 겹치며 충돌할 가능성이 존재하기 때문에 권장되지 않는 방법입니다.
    Agent Nodes는 윈도우/리눅스와 같은 서버로 개별 Script를 작성해 서버 위에서 Jenkins 실행과 정지를 조절합니다.
    Anget Clouds는 Dynamic Agent라고 불리며 작업, 컨테이너화, 배포, 완성 작업에 사용됩니다.
  3. Jenkins Web Interface
    Jenkins 2.0d은 Jenkins Blue Ocean으로 불리는 웹 인터페이스를 제공합니다.

docker-compose로 Jenkins 컨테이너화

  jenkins:
    image: jenkins/jenkins:lts
    ports:
      - "8081:8000" // JENKINS 포트
      - "50000:50000" // JNLP(Java Network Launch Protocol) 포트
    volumes:
      - jenkins-data:/var/jenkins_home
    environment:
      TZ: "Asia/Seoul"

JNLP는 왜?

Jenkins에서 분산 빌드 환경을 구성하지 않으면 순차적으로 빌드하게 되지만, 분산 빌드 환경을 구성하게 되면 동시에 처리하므로 빌드 시간을 개선할 수 있습니다. 또한, 빌드 작업을 여러 서버에 분산시켜 Jenkins 마스터 서버의 부하를 감소시키고, 시스템 리소스를 효율적으로 사용할 수 있습니다.

이러한 분산 빌드 구성 환경 중 하나로 JNLP를 사용할 수 있으며, JNLP는 에이전트(슬레이브)가 JNLP를 통해 마스터에 스스로 연결하는 방식을 사용합니다. 또다른 방법은 SSH프로토콜을 사용하는 방법이 있습니다.

Jenkins 설치 이후 초기세팅

  1. Jenkins_home User로 소유자 변경
  2. 패스워드 docker-compose logs를 통해 패스워드 확인
  3. 만약 패스워드를 찾을 수 없다면 jenkins/secrets/initialAdminPassword에서 초기 패스워드 정보 확인
  4. Jenkins 웹에 패스워드 복사
  5. 필수 Plugin 설치
  6. admin 계정 생성

추가적으로 사용하면 좋은 플러그인

  • Data Parameter: Spring Batch 파라미터 관련
  • Notification: jenkins Notification
  • Maven Intergration
  • Pulish Over SSH
  • GitLab
  • Gitlab Hook Plugin
  • Blue Ocean

 

Plugin 설치 후 재시작하여 모든 작업을 완료하여야함.

Reference

https://ict-nroo.tistory.com/31

 

[Jenkins] 젠킨스란 무엇인가

What is jenkins? 젠킨스는 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴이다. CI(Continuous Integration) 툴 이라고 표현한다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을

ict-nroo.tistory.com

 

https://cocococo.tistory.com/entry/Jenkins-JNLP-%EB%B6%84%EC%82%B0-%EB%B9%8C%EB%93%9C-

%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%EB%B0%A9%EB%B2%95#google_vignette

 

[Jenkins] JNLP 분산 빌드 환경 구축 방법

Jenkins에서 분산 빌드 환경을 구성하지 않으면 순차적으로 빌드하게 되지만, 분산 빌드 환경을 구성하게 되면 동시에 처리하므로 빌드 속도가 빨라진다. 또한, 빌드 작업을 여러 서버에 분산시켜

cocococo.tistory.com

 

https://velog.io/@guri_coding/Jenkins-%EB%94%B0%EB%9D%BC%EC%9E%A1%EA%B8%B0-1-Jenkins%EB%9E%80

 

Jenkins 따라잡기 [1] - Jenkins란?

Jenkins 개념 및 구조에 대한 설명

velog.io

 

https://freedeveloper.tistory.com/181

 

[docker-compose] jenkins 설치 및 초기셋팅

docker 설치로 수동 작업해준 것들이 불편해 docker-compose 설치법으로 개편 docker, docker-compose, zulu jdk 13 까지 모두 자동으로 설치된 jenkins 서버가 생성됨 1. Dockerfile 생성 FROM jenkins/jenkins:latest ## 현재

freedeveloper.tistory.com