336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

자동 빌드 (CI, 지속 통합 : Continuous Integration)

매일 또는 매번 커밋할 때마다 변경된 코드를 받아서 매번 빌드하고 테스트 하는 개념


  • 소스 코드 일관성 유지
  • CI 도구에 의해서 자동으로 빌드
    1. 시간 간격에 의한 빌드 : 일정 시간 간격을 정해서 빌드하는 방법
    2. 커밋에 따른 자동 빌드
  • Silent Period : 개발자가 소스를 커밋하고 있을 때 완료되지 않은 상태에서 CI 도구가 체크아웃을 받아서 불완전한 코드를 내려받을 가능성을 최소화하는 옵션
  • 자동 테스팅
  • 일일 체크아웃과 빌드

CI (Continuous Integration) Process


CI Process


개발자

  1. Source Control Server(소스 관리 시스템)으로부터 최신 코드를 Checkout or Update

  2. 최신 코드를 가지고 개발 및 테스트 작성

  3. 로컬에서 빌드 및 테스트

  4. 테스트 과정에서 커버리지 분석 및 코드 인스펙션 수행

  5. 완료된 코드를 소스 관리 시스템에 저장

  6. 완료된 코드와 테스트를 소스 관리 시스템에 커밋

CI 도구
  1. 체크아웃
  2. 컴파일
  3. 테스트 서버에 배포
  4. 커버리지 분석
  5. 코드 인스팩션 수해하고 리포트 생성
  6. 1 ~6 과정이 정상적으로 수행되었을때 안정적인 버전으로 파악하고 Tagging 수행
  7. 릴리즈
  8. 결과 분석


    ◎ 오픈소스 CI 도구 젠킨스 (Jenkins)

    https://jenkins.io


    Plugin 설치


    admin password는 cat을 통해서 위 경로의 파일을 열어 봐야 함

    mac의 경우 관리자 권한이 필요 (sudo -s)


    새로운 job 생성



    빌드 설정



    * 실제 빌드 는 추후에 Git 저장소와 연계해서 할 예정임 (ToDo...)




    ◎ CD(Continuous Delivery) 와 DevOps 기반의 개발 모델


    CD (Continuous Delivery)

    1. 운영 시스템에 계속 수정이나 새로운 기능을 지속적으로 릴리즈 하는 개념

    2. 매일 새로운 수정이나 기능이 추가되면 거의 매일 릴리즈 하는 개념임


    DevOps

    1. Nexflix에서 주로 시작된 개념으로 개발팀과 운영팀을 하나로 묶어서 커뮤니케이션에서 오는 장애를 해소하고 빠른 서비스 개발과 반영을 하고자 함에 목적

    2. 개발팀과 운영팀을 하나로 합쳐 의사소통을 빠르게 하고, 개발자가 직접 운영환경을 컨트롤함으로써 빠른 피드백을 받고 빠른 반영을 통해서 서비스의 신속성을 향상시키는 모델


    * 테스트 계획서를 작성(Plan)하고, 개발(Code) 및 테스트(test)를 수행한 후 운영 환경에 배포(release and deploy)하고 모니터링 (monitor) 을 합니다. 그리고 신규 기능에 대한 피드백이나 효과를 모니터링해서 다시금 요구 사항을 정의하는 형태를 따르게 됩니다.





    ◎ 자동 배포(CD : Continuous Delivery or Continuous Deployment

     빌드가 완려된 후 배포까지 자동화


    특정 솔루션에 종속적인 도구

    1. 톰캣이나 웹로직 같은 WAS의 경우 각 제품에 특화된 배포 도구를 가지고 있다

    2. Tomcat Client Deployer등 원격에서 war파일을 배포해줄 수 있는 도구

    3. 해당 솔루션에 최적화 되어 안정적인 배포가 가능

    4. 반대로 솔루션에 관련된 애플리케이션 파일만 배포가 가능하고 war파일 이외에 다른 디렉토리에 configuration 파일을 배포하고 싶을 경우 불가능


    형상 관리(Configuration Management)

    1. Puppet 이나 Chef 와 같은 형상 관리 도구 기반의 배포 방식

    2. 이러한 도구는 태생이 배포 보다는 초기 솔루션을 설치하거나, 다수의 서버나 솔루션에 대한 Configuration 정보를 중앙 관리 목적이기에 이러한 형상 관리 인프라를 가ㅈ추고 있는 경우 단순한 Deploy 과정을 효율적을 사용 가능


    원격 셸 기반 도구

    1. Remote Shell 기반 도구 : SSH 나 RSH과 같은 명령을 도구로 실행시켜주는 도구

    2. 파일 복사부터 명령 줄에서 입력하는 명령들을 원격으로 실행

    3. Python Fabric, Capistrano(Ruby)


    ◎ 무정지 배포 아키텍처

    자바 기반의 애플리케이션 서버의 경우 Runtime redeployment(시스템을 운영 중에 정지 없이 프로그램을 변경하는 행위로, 일부 자바 기반의 애플리케이션 서버에서는 war와 같은 모듈을 시스템을 무정지 상태로 재배포할 수 있는 기능을 제공)를 제공하는 제품들이 많다.



    • redeployment 원리는 새로운 애플리케이션을 로드하고 classloader를 reload하는 형식
    • 애플리케이션 서버를 두 개의 클러스터 그룹으로 나눈 후 클러스터 앞에 reverse proxy(HAProxy, nginx, apache proxy 모듈)을 배치ㅣ
    • reverse proxy 앞에 L4 스위치를 둬서 각 클러스터 로드 밸런싱 수행
    • 배포 할때 reverse proxy를 정지 시키면 L4 스위치가 해당 proxy로 request를 보내지 않고 재배포후 reverse proxy를 재가동


    블로그 이미지

    뚱땡이 우주인

    ,