책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/docker-jenkins
요약
소프트웨어를 개발해 고객에게 인도하는 절차를 효과적으로 구축하는 데 필요한 주요 기술과 사례를 설명한다. 지속적 통합 및 인도의 기본 개념과 구조를 설명한다. 또한 젠킨스와 도커, 쿠버네티스와 앤서블을 이용해 애플리케이션을 빌드하고, 지속적으로 통합하고, 테스트를 자동화하고, 구성을 관리해서 지속적으로 배포하는 프로세스를 체계적으로 구축하는 방법을 구체적인 사례를 가지고 설명한다. 이 책을 통해 자신의 조직에 적합한 지속적 통합/인도 프로세스를 계획하고, 실제로 적용하고, 발전시키는 데 필요한 지식을 갖출 수 있다.
이 책에서 다루는 내용
◆ 도커의 기초를 배우고 지속적 인도 프로세스에 맞게 애플리케이션을 도커 이미지로 제작하기
◆ 클라우드 환경에서 젠킨스 활용하기
◆ 쿠버네티스로 도커 서버 풀 확장하기
◆ 큐컴버로 인수 테스트를 작성하고 이를 도커 환경에서 젠킨스로 실행하기
◆ 도커 레지스트리에 이미지를 발행하고 모범 사례에 맞춰 젠킨스 파이프라인 배포하기
이 책의 대상 독자
데브옵스 엔지니어와 시스템 관리자, 도커 전문가 또는 도커와 젠킨스를 통합하는 방법에 관심이 있는 개발자를 대상으로 한다.
이 책의 구성
1장, ‘지속적 인도 소개’에서는 전통적인 인도 프로세스의 문제점을 보여주고, 아마존과 야후의 성공 사례를 설명한다.
2장, ‘도커 소개’에서는 컨테이너화에 대해 간략히 소개하고, 도커 플랫폼으로 애플리케이션과 서비스를 운영할 때의 이점을 알아본다.
3장, ‘젠킨스 구성’에서는 젠킨스 도구와 아키텍처를 소개하고, 마스터/에이전트 인스턴스를 도커 서버나 클라우드에 또는 도커 없이 설치하는 방법을 알아본다. 그런 다음 에이전트 확장 방법을 다룬다.
4장, ‘지속적 통합 파이프라인’에서는 기존의 지속적 통합 파이프라인에서 세 가지 주요 단계(체크아웃, 빌드, 단위 테스트)가 어떻게 이뤄지는지를 설명한다.
5장, ‘자동인수 테스트’에서는 애플리케이션을 릴리스하기 전에 자동 인수 테스트를 수행해 전체 시스템이 예상대로 동작하는지를 확인하는 방법에 대해 설명한다.
6장, ‘쿠버네티스로 하는 클러스터링’에서는 도커 도구를 사용해서 여러 팀과 프로젝트로 규모를 확장하는 방법을 설명한다. 쿠버네티스에 대해 소개하고, 이를 지속적 인도 프로세스에서 사용하는 방법을 배운다.
7장, ‘앤서블로 하는 구성 관리’에서는 서버를 확장하고 여기에 애플리케이션을 배포하는 방법을 배운다.
8장, ‘지속적 인도 파이프라인’에서는 최종 파이프라인에서 다루지 않은 주제인 환경 및 인프라 구성, 애플리케이션 버전 관리, 비기능 테스트 등을 다룬다.
9장, ‘지속적 인도 – 고급편’에서는 완전한 파이프라인을 구축한 후 당면하게 될, 더 어려운 실제 시나리오를 다룬다.
목차
목차
- 1부. 환경 설정
- 1장. 지속적 인도 소개
- 지속적 인도(CD)의 이해
- 전통적 인도 프로세스
- 전통적 인도 프로세스의 동작 방식
- 전통적 인도 프로세스의 단점
- 지속적 인도(CD) 방식의 장점
- 성공 스토리
- 전통적 인도 프로세스
- 자동 배포 파이프라인
- 지속적 통합(CI)
- 자동 인수 테스트
- 애자일 테스팅 매트릭스
- 테스트 피라미드
- 구성 관리
- CD의 전제 조건
- 조직 구조의 전제 조건
- 데브옵스 문화
- 프로세스 내의 고객
- 사업적 의사결정
- 기술 및 개발의 전제 조건
- 조직 구조의 전제 조건
- CD 프로세스 구축
- 도구 소개
- 도커 생태계
- 젠킨스
- 앤서블
- 깃허브
- 자바/스프링 부트/그래들
- 그 외의 도구들
- 도구 소개
- 완벽한 CD 시스템 생성하기
- 도커 소개
- 젠킨스 구성
- 지속적 통합 파이프라인
- 자동 인수 테스트
- 쿠버네티스 클러스터링
- 앤서블로 하는 구성 관리
- 지속적 인도 파이프라인/지속적 인도-고급편
- 요약
- 질문
- 더 읽을거리
- 지속적 인도(CD)의 이해
- 2장. 도커 소개
- 기술 요구 사항
- 도커 소개
- 컨테이너화와 가상화 비교
- 도커의 필요성
- 실행 환경
- 격리
- 애플리케이션 구성
- 이식성
- 고양이와 가축
- 다른 컨테이너화 기술들
- 도커 설치
- 도커에 필요한 환경
- 로컬 머신에 설치하기
- 도커 데스크톱
- 우분투용 도커
- 다른 리눅스 배포판용 도커
- 도커 설치 테스트
- 서버에 설치
- 전용 서버
- 도커에서 hello-world 실행하기
- 도커 컴포넌트
- 도커 클라이언트와 서버
- 도커 이미지와 컨테이너
- 도커 컴포넌트
- 도커 애플리케이션
- 도커 이미지 빌드
- 도커 커밋
- 도커파일
- 도커 애플리케이션 완성하기
- 애플리케이션 작성
- 환경 준비하기
- 이미지 빌드하기
- 애플리케이션 실행하기
- 환경 변수
- 도커 컨테이너 상태
- 도커 네트워킹
- 서비스 실행하기
- 컨테이너 네트워크
- 컨테이너 포트 공개
- 자동 포트 할당
- 도커 볼륨 사용하기
- 도커에서 이름 사용하기
- 컨테이너 이름 지정하기
- 이미지에 태그 달기
- 도커 클린업
- 컨테이너 클린업
- 이미지 클린업
- 도커 명령어 살펴보기
- 요약
- 연습 문제
- 질문
- 더 읽을거리
- 3장. 젠킨스 구성
- 기술 요구 사항
- 젠킨스란 무엇인가?
- 젠킨스 설치
- 도커로 젠킨스 설치하기
- 전용 패키지로 젠킨스 설치하기
- 초기 구성
- 쿠버네티스에 젠킨스 설치하기
- 클라우드에서 젠킨스 사용하기
- 젠킨스-Hello World
- 젠킨스 아키텍처
- 마스터와 에이전트
- 확장성
- 수직적 확장
- 수평적 확장
- 테스트 인스턴스/프로덕션 인스턴스
- 샘플 아키텍처
- 에이전트 구성하기
- 통신 프로토콜
- 에이전트 설정하기
- 영구 에이전트
- 영구 도커 호스트 에이전트
- 젠킨스 스웜 에이전트
- 동적 프로비저닝 도커 에이전트
- 동적 프로비저닝 쿠버네티스 에이전트
- 동적 프로비저닝 쿠버네티스 에이전트 이해하기
- 에이전트 테스트하기
- 커스텀 젠킨스 이미지
- 젠킨스 에이전트 구축하기
- 젠킨스 마스터 빌드하기
- 구성 및 관리
- 플러그인
- 보안
- 백업
- 블루오션 UI
- 요약
- 연습 문제
- 질문
- 더 읽을거리
- 2부. 애플리케이션 설계 및 테스트
- 4장. 지속적 통합 파이프라인
- 기술 요구 사항
- 파이프라인 소개
- 파이프라인의 구조
- 멀티-스테이지 Hello World
- 파이프라인 구문
- 섹션
- 지시어
- 스텝
- 커밋 파이프라인
- 체크아웃
- 깃허브 리포지토리 생성
- 체크아웃 스테이지 생성하기
- 컴파일
- 자바 스프링 부트 프로젝트 생성하기
- 코드를 깃허브로 푸시하기
- 컴파일 스테이지 생성하기
- 단위 테스트
- 비즈니스 로직 생성하기
- 단위 테스트 작성하기
- 단위 테스트 스테이지 생성하기
- 젠킨스파일
- 젠킨스파일 생성하기
- 젠킨스파일에서 파이프라인 실행하기
- 체크아웃
- 코드-품질 스테이지
- 코드 커버리지
- JaCoCo를 그래들에 추가하기
- 코드 커버리지 스테이지 추가하기
- 코드 커버리지 리포트 발행하기
- 정적 코드 분석
- 체크스타일 구성 추가하기
- 정적 코드 분석 스테이지 추가하기
- 정적 코드 분석 리포트 발행하기
- 소나큐브
- 코드 커버리지
- 트리거와 알림
- 트리거
- 외부 트리거
- 폴링 SCM 트리거
- 스케줄 빌드 트리거
- 알림
- 이메일
- 그룹 채팅
- 팀 사무실
- 트리거
- 팀 개발 전략
- 개발 워크플로우
- 트렁크-기반 워크플로우
- 브랜치 워크플로우
- 포크 워크플로우
- 지속적 통합 적용하기
- 브랜치 전략
- 기능 토글
- 젠킨스 멀티-브랜치
- 비기술 요구 사항
- 개발 워크플로우
- 요약
- 연습 문제
- 질문
- 더 읽을거리
- 5장. 자동 인수 테스트
- 기술 요구 사항
- 인수 테스트 소개
- 도커 레지스트리
- 아티팩트 리포지토리
- 도커 레지스트리 설치하기
- 클라우드 방식 도커 레지스트리
- 도커 허브
- 자체 호스팅 방식 도커 레지스트리
- 도커 레지스트리 사용하기
- 이미지 빌드하기
- 레지스트리로 이미지 푸시하기
- 레지스트리에서 이미지 가져오기
- 젠킨스 파이프라인에서의 인수 테스트
- 도커 빌드 스테이지
- 도커파일 추가하기
- 도커 빌드를 파이프라인에 추가하기
- 도커 푸시 스테이지
- 인수 테스트 스테이지
- 스테이징 배포를 파이프라인에 추가하기
- 인수 테스트를 파이프라인에 추가하기
- 클린업 스테이지 추가하기
- 도커 빌드 스테이지
- 인수 테스트 작성하기
- 사용자 - 대면 테스트 작성하기
- 인수 테스트 프레임워크 사용하기
- 인수 기준 생성하기
- 스텝 정의 생성하기
- 자동 인수 테스트 실행하기
- 인수 테스트-주도 개발
- 요약
- 연습 문제
- 질문
- 더 읽을거리
- 6장. 쿠버네티스로 하는 클러스터링
- 기술 요구 사항
- 서버 클러스터링
- 서버 클러스터링 소개
- 쿠버네티스 소개
- 쿠버네티스 기능 개요
- 쿠버네티스 설치
- 쿠버네티스 클라이언트
- 쿠버네티스 서버
- 로컬 환경
- 클라우드 플랫폼
- 사내 설치
- 쿠버네티스 설정 검증
- 쿠버네티스 사용하기
- 애플리케이션 배포
- 쿠버네티스 서비스 배포
- 애플리케이션 노출
- 쿠버네티스의 고급 기능
- 애플리케이션 확장
- 애플리케이션 업데이트하기
- 롤링 업데이트
- 쿠버네티스 객체와 워크로드
- 애플리케이션 의존성
- 쿠버네티스 DNS 확인
- 멀티 애플리케이션 시스템 개요
- 멀티 애플리케이션 시스템 구현
- 그래들에 Hazelcast 클라이언트 라이브러리 추가하기
- Hazelcast 캐시 구성 추가하기
- 스프링 부트 캐시 추가하기
- 도커 이미지 빌드하기
- 멀티 애플리케이션 시스템 테스트
- 대체 다른 클러스터 관리 시스템
- 도커 스웜
- 아파치 Mesos
- 기능 비교
- 요약
- 연습 문제
- 질문
- 더 읽을거리
- 3부. 애플리케이션 배포
- 7장. 앤서블로 하는 구성 관리
- 기술 요구 사항
- 구성 관리 소개
- 좋은 구성 관리 도구의 특징
- 구성 관리 도구 개요
- 앤서블 설치
- 앤서블 서버 요구 사항
- 앤서블 설치
- 앤서블 사용하기
- 인벤토리 생성하기
- 애드혹 명령
- 플레이북
- 플레이북 정의하기
- 플레이북 실행하기
- 플레이북의 멱등성
- 핸들러
- 변수
- 롤
- 롤 이해하기
- 앤서블 갤럭시
- 앤서블을 이용한 배포
- Hazelcast 설치하기
- 웹 서비스 배포하기
- Hazelcast 호스트 주소 변경하기
- 플레이북에 계산기 배포 추가하기
- 배포 실행하기
- 도커 및 쿠버네티스와 앤서블
- 앤서블의 장점
- 앤서블 도커 플레이북
- 도커 설치하기
- 도커 컨테이너 실행하기
- 앤서블 쿠버네티스 플레이북
- 요약
- 연습 문제
- 질문
- 더 읽을거리
- 기술 요구 사항
- 8장. 지속적 인도 파이프라인
- 환경 및 인프라
- 환경 유형
- 프로덕션 환경
- 스테이징 환경
- 테스트 환경
- 개발 환경
- 지속적 인도 환경
- 보안 환경
- 환경 유형
- 비기능 테스트
- 비기능 테스트의 유형
- 성능 테스트
- 내구성 테스트
- 보안 테스트
- 유지보수 테스트
- 복구 테스트
- 비기능 테스트의 어려운 점
- 비기능 테스트의 유형
- 애플리케이션 버전 관리
- 버전 관리 전략
- 젠킨스 파이프라인에서의 버전 관리
- 지속적 인도 파이프라인 완성하기
- 인벤토리
- 버전 관리
- 원격 스테이징 환경
- 인수 테스트 환경
- 릴리스
- 스모크 테스트
- 젠킨스파일 완성하기
- 요약
- 연습 문제
- 질문
- 더 읽을거리
- 기술 요구 사항
- 환경 및 인프라
- 9장. 지속적 인도 - 고급편
- 데이터베이스 변경 관리
- 스키마 업데이트의 이해
- 데이터베이스 마이그레이션 소개
- Flyway 사용
- 지속적 인도에서 데이터베이스 변경
- 하위 버전과 호환이 가능하게 변경한 경우
- 하위 버전과 호환이 불가능하게 변경한 경우
- 코드 변경 사항에서 데이터베이스 업데이트 분리
- 공유 데이터베이스 분리
- 테스트 데이터 준비
- 단위 테스트
- 통합/인수 테스트
- 성능 테스트
- 스키마 업데이트의 이해
- 파이프라인 패턴
- 파이프라인 병렬화
- 파이프라인 컴포넌트 재사용
- 파라미터 방식 빌드
- 공유 라이브러리
- 배포 롤백
- 수작업 스텝 추가
- 릴리스 패턴
- 블루-그린 배포
- 카나리아 릴리스
- 레거시 시스템과의 연동
- 빌드 및 배포 자동화
- 테스트 자동화
- 리팩토링과 새로운 기능 추가
- 인간적 요소의 이해
- 요약
- 연습 문제
- 질문
- 데이터베이스 변경 관리