젠킨스로 배우는 CI/CD 파이프라인 구축 - 에이콘 소프트웨어 테스팅 시리즈
프라노데이프라모드딩가레
저자:프라노데이프라모드딩가레(PranodayPramodDingare)
소프트웨어테스트분야에서15년이상의경력을가진인증된소프트웨어테스트전문가로,자동화테스트분야에서10년이상의경력이있다.지난8년동안모바일애플리케이션의테스트자동화를주도해왔으며테스트자동화도구전파,R&D,개념증명,파일럿프로젝트에참여했다.
인도및해외의다양한스타트업과중견IT기업에서프리랜서테스트자동화컨설턴트로활동했다.그의오픈소스테스트자동화도구는상용제품을성공적으로대체해비용을크게절감했다.
젠킨스(Jenkins),깃랩(Gitlab),넥서스(Nexus),도커(Docker)등의데브옵스(DevOps)도구를구현해조직의테스트자동화프로세스에데브옵스관행을통합하는일을담당하고있다.최근데브옵스전담업무로전환해지난1년동안데브옵스선임전문가로일하고있다.
도커,메이븐(Maven),쿠버네티스,깃,넥서스,애저데브옵스(AzureDevOps),AWS,소나큐브(SonarQube),젠킨스등과같은다양한데브옵스도구를구현했으며다양한애플리케이션의빌드및배포프로세스를자동화하는데중요한역할을해왔다.
최신테스트자동화와데브옵스도구에대한200회이상의소매및기업교육을진행하는등9년이상소프트웨어테스트와데브옵스교육에종사해온강사다.
또한최신테스트자동화도구와기술에대한블로그도운영한다.
테스트자동화아키텍트로서최신도구와기술에대한지식을가르치고공유하며전문가들이꿈을이룰수있도록돕는일에열정을쏟고있다.
역자:이정표
모바일브라우저개발부터클라우드서비스기획까지20년간다양한개발프로젝트에참여했으며,현재는SW와IT분야의기술조사와분석업무를하고있다.옮긴책으로는에이콘출판사에서펴낸『난독화,디지털프라이버시생존전략』(2017),『젠킨스마스터』(2018),『젠킨스블루오션시작하기』(2019),『린모바일앱개발』(2019),『알고리즘윤리』(2021),『배포자동화와지속적인도』(2022),『알고리듬으로생각하기』(2023)등이있다.
1장.지속적통합/배포의이해
__개발워크플로
____로컬에서단위테스트실행
____중앙리포지터리로코드푸시및병합
____병합후코드컴파일
____컴파일된코드에서테스트실행
____아티팩트배포
__지속적제공/지속적배포
__CI/CD워크플로예제
____최신코드가져오기
____단위테스트구현과실행
____코드개발
____단위테스트케이스재실행
____코드푸시와병합
____코드병합후컴파일
____병합된코드에서테스트실행
____아티팩트배포
____배포애플리케이션의E-E테스트실행
__요약
2장.젠킨스소개
__젠킨스란?
____젠킨스의역사
____젠킨스를이용한CI/CD구현
____젠킨스아키텍처
__요약
3장.젠킨스설치
__윈도우에젠킨스설치
____하드웨어/소프트웨어요구사항
____다양한젠킨스설치방법
____젠킨스의구성파일및디렉터리구조이해
____jenkins.xml의주요설정값이해
__요약
4장.젠킨스구성
__전역설정및경로의구성
____젠킨스로그인
____시스템구성옵션이해
____사용자이름과비밀번호재설정
____신규사용자추가
__요약
5장.젠킨스플러그인관리
__플러그인이란
____많이사용되는플러그인
____플러그인설치
____플러그인매니저이해
__설치문제해결법
____문제1
____문제2
__요약
6장.전역도구구성의이해
__전역도구구성설정
____전역도구구성의이해
__요약
7장.젠킨스의보안관리
__젠킨스의전역보안구성
____젠킨스LDAP구성
____젠킨스LDAP필요성
____젠킨스LDAP구성
__요약
8장.자격증명관리
__젠킨스의자격증명이해
__자격증명항목생성
____범위및도메인이해
____젠킨스에서자격증명항목생성
____전역범위와전역도메인(기본값)에서자격증명항목생성
____자격증명항목업데이트
____특정도메인에서자격증명항목생성
__자격증명공급자구성
__요약
9장.사용자관리
__젠킨스사용자생성
__젠킨스사용자에게역할할당
____역할-기반전략플러그인설치
____역할-기반전략플러그인활성화
____젠킨스에서역할생성
____사용자에게역할할당
____역할할당확인
__프로젝트-기반역할생성
____프로젝트-기반역할할당
____프로젝트-기반역할검증
__매트릭스-기반보안이해
__프로젝트-기반매트릭스권한부여전략이해
__요약
10장.젠킨스작업의이해
__젠킨스의작업
__젠킨스의빌드
__프리스타일작업
__젠킨스의작업생성
__젠킨스의작업구성
____매개변수형프로젝트
____프로젝트비활성화
____동시빌드실행
____대기시간
____재시도회수
____업스트림프로젝트가빌드중일때빌드차단
____다운스트림프로젝트가빌드중일때빌드차단
____커스텀워크스페이스사용
____표시이름지정
____의존성빌드로그유지
____소스코드관리
____빌드브랜치
____빌드트리거
____빌드스텝
____포스트-빌드액션
__작업실행및결과확인
__작업수정
__워크스페이스보기
__워크스페이스비우기
__작업삭제
__요약
11장.메이븐으로자바API프로젝트준비
__메이븐빌드도구의이해
____자바API프로젝트개발과정
____개발자지원빌드도구사용법
____자바API프로젝트빌드
____메이븐프로젝트디렉터리구조
____자바API프로젝트코드파일
____자바API프로젝트의pom.xml파일
____CLI에서메이븐사용
____메이븐의settings.xml파일
__요약
12장.메이븐과넥서스통합및자바API릴리스용프리스타일작업생성
__깃의이해
__깃설치
__깃허브와깃랩
__깃프로세스이해
____1단계:로컬리포지터리생성
____2단계:깃랩에중앙리포지터리생성
____3단계:로컬리포지터리로커밋
____4단계:로컬리포지터리의코드를깃랩으로푸시
____5단계:깃랩의리포지터리에마스터브랜치생성
__넥서스리포지터리의이해
____아티팩트
____넥서스리포지터리
__넥서스리포지터리설치
__넥서스리포지터리시작
__넥서스설치:윈도우서비스
__넥서스리포지터리매니저접속
__호스티드리포지터리생성
__메이븐과넥서스리포지터리통합
____넥서스리포지터리에서CalculatorAPI.jar파일릴리스
__넥서스리포지터리에서CalculatorAPI.jar를릴리스하는젠킨스프리스타일작업생성
____1단계:젠킨스에서메이븐설정
____2단계:깃리포지터리자격증명추가
____3단계:젠킨스대시보드에서프리스타일작업생성
____4단계:API프로젝트에뺄셈함수와단위테스트케이스추가
____5단계:로컬리포지터리에서커밋과푸시실행
____6단계:SubtractionFunction브랜치를깃랩중앙리포지터리의Master브랜치와병합
__넥서스리포지터리에서CalculatorAPI.jar를릴리스하는젠킨스프리스타일작업실행
__요약
13장.자바API릴리스를관리하는자동실행프리스타일작업생성
__비공개깃랩리포지터리에컨트리뷰터추가
____코드리포지터리에팀원초대
__SSH인증이해
____SSH인증필요성
____깃랩의SSH인증동작방식
__자바API코드리포지터리에SSH인증적용
____1단계:공개키와개인키를생성
____2단계:JenkinsBookCalculatorAPI깃랩리포지터리에공개키추가
____SSH를이용한리포지터리접속과함수추가
____1단계:JenkinsBookCalculatorAPI리포지터리복제
____2단계:Calculator클래스에Multiplication함수추가
____3단계:Multiplication함수의테스트케이스추가
____4단계:pom.xml에서버전을3.0으로변경
____5단계:단위테스트및신규기능의회귀테스트
____6단계:로컬브랜치에기능변경사항커밋
____7단계:로컬브랜치를원격리포지터리로푸시
____8단계:새로추가된브랜치의병합요청
__이메일알림기능을갖는자동실행젠킨스작업생성
____1단계:프리스타일작업생성
__젠킨스에서이메일알림설정
__새젠킨스작업시작
__SCM이설정된작업실행
__빌드실패이메일알림확인
__요약
14장.젠킨스파이프라인의이해
__젠킨스파이프라인
__파이프라인의장점
__파이프라인용어이해
__파이프라인구문
____선언형파이프라인기초
____스크립트형파이프라인기초
__젠킨스에서파이프라인정의
____파이프라인속도/내구성오버라이드
__java.lang.IllegalArgumentException:
__UnsupportedClassFileMajorVersionError해결
__젠킨스파이프라인의문자열보간이해
____문자열보간예제
__자바API를릴리스하는파이프라인작업생성
__파이프라인작업실행및CalculatorAPI릴리스
__요약
15장.웹애플리케이션프로젝트를관리하는젠킨스작업생성
__계산기웹애플리케이션의소스코드
__계산기웹애플리케이션구현
__계산기웹애플리케이션배포
__계산기웹애플리케이션접속
__셀레늄을이용한E-E테스트이해
____UI자동화테스트
__UI자동화도구의동작방식
____셀레늄웹드라이버
____파이썬으로작성된셀레늄테스트이해
____테스트케이스실행에필요한소프트웨어설정
____셀레늄파이썬테스트실행
__웹애플리케이션및자동화테스트프로젝트를깃허브리포지터리로푸시
____1단계:깃허브가입
____2단계:새리포지터리생성
____3단계:깃허브리포지터리용SSH키쌍생성
____4단계:$(user.name)\.ssh\config파일에SSH개인키파일경로넣기
____5단계:깃허브리포지터리에SSH공개키추가
____6단계:계산기웹애플리케이션을로컬리포지터리의마스터브랜치에커밋
____7단계:마스터브랜치를원격리포지터리로푸시
__셀레늄파이썬자동프로젝트를깃허브로푸시
__매개변수형자동실행프리스타일젠킨스작업생성
____1단계:ParameterizedTrigger플러그인설치
____2단계:BuildAndDeployCalculatorWebApplication작업생성
____3단계:TestCalculatorWebApplication작업생성
__확장이메일알림기능구성
____1단계:이메일확장플러그인설치
____2단계:확장이메일설정
____3단계:TestCalculatorWebApplication작업의.
____Post-Build섹션에서EmailNotification스텝추가
__매개변수형프리스타일작업수동실행
__매개변수형프리스타일작업자동실행
__매개변수형파이프라인작업생성
__계산기웹애플리케이션매개변수형파이프라인작업의빌드생성과배포
__TestCalculatorWebApplication파이프라인작업생성
__매개변수형파이프라인작업수동실행
__매개변수형파이프라인작업자동시작
__요약
16장.코드형파이프라인이해
__API인증
__깃허브리포지터리에API인증적용
__API토큰으로비공개깃허브리포지터리에접속
__깃랩에서API액세스토큰생성
__API토큰으로비공개깃랩리포지터리에접속
__젠킨스에서API토큰으로깃허브/깃랩리포지터리에접속
____1단계:젠킨스에서메이븐설정
____2단계:젠킨스대시보드에서프리스타일작업생성
____3단계:복제된API프로젝트의pom.xml버전변경
____4단계:로컬리포지터리에서변경사항을커밋하고깃랩중앙리포지터리로푸시
__API토큰으로깃랩리포지터리에접속하는프리스타일작업실행
____코드형파이프라인이해
____Jenkinsfile에서파이프라인작성
__깃허브웹훅으로시작하는파이프라인작업생성
__깃허브웹훅을사용해파이프라인작업시작
__요약
17장.젠킨스분산빌드
__젠킨스의분산아키텍처
__컨트롤러와에이전트의연결
__SSH로컨트롤러에서에이전트로의연결
____1단계:SSHBuildAgents플러그인설치
____2단계:에이전트에자바설치
____3단계:SSH공개키-개인키쌍생성
____4단계:개인키가포함된자격증명항목을컨트롤러기기에추가
____5단계:젠킨스컨트롤러에노드추가
____6단계:에이전트의authorized_keys파일에공개키추가
____7단계:에이전트의authorized_keys파일권한변경
____8단계:sshd서비스재시작
____9단계:컨트롤러에서에이전트로의연결확인
____10단계:컨트롤러에서새노드시작
__Node1에이전트에서실행할프리스타일작업생성
__Node1에이전트에서새로운프리스타일작업실행
__JNLP를사용해에이전트와컨트롤러를연결하는구성이해
____1단계:JNLP에이전트의연결요청을수신하도록젠킨스컨트롤러구성
____2단계:젠킨스URL설정
____3단계:에이전트기기에서새노드추가
__JNLP노드에서실행할작업생성
__요약
18장.AWS와젠킨스통합
__AWS의EC2인스턴스이해
__AWS에서EC2인스턴스생성
____1단계:AWS가입
____2단계:AWS로그인
____3단계:EC2인스턴스생성
____4단계:EC2인스턴스시작
__계산기웹애플리케이션배포용EC2인스턴스구성
____1단계:IIS웹서버설치
____2단계:IIS웹서버구성
____3단계:로컬컴퓨터와EC2인스턴스간의SSH연결구성
__Calculator.html파일을EC2인스턴스에복사
__로컬컴퓨터에서EC2인스턴스의Calculator.html접속
__EC2인스턴스에계산기웹애플리케이션을배포하는젠킨스작업생성
__셀레늄프레임워크에서계산기애플리케이션URL변경
__BuildAndDeployCalculatorWebApplicationOnEC2Instance작업실행
__요약
19장.기타주제-1부
__젠킨스CLI이해
__젠킨스CLI파일다운로드
__젠킨스CLI로작업생성
____기본인증을이용한사용자인증
____CLI명령으로SSH를이용한사용자인증
____방화벽에서인바운드규칙구성
____SSH인증을사용해젠킨스CLI로작업빌드
__작업내보내기
__작업가져오기
__요약
20장.기타주제-2부
__젠킨스의원격액세스API이해
__젠킨스원격액세스API사용
____젠킨스원격API로기존젠킨스작업구성입수
____젠킨스원격API로새젠킨스작업생성
____젠킨스원격API로매개변수형젠킨스작업시작
____젠킨스원격API로일반젠킨스작업시작
__Python-Jenkins로젠킨스서버작업
____Python-Jenkins패키지라이브러리사용
__젠킨스파이프라인에서공유라이브러리사용
____1단계:.groovy파일에공유라이브러리생성
____2단계:생성된공유라이브러리파일을깃랩리포지터리로푸시
____3단계:젠킨스에서공유라이브러리구성
____4단계:공유라이브러리사용파이프라인작업생성
____5단계:파이프라인작업실행하기
__요약
이책에서다루는내용
젠킨스를사용한종단간(E-E,End-to-End)파이프라인생성
젠킨스와아마존웹서비스(AWS,AmazonWebServices),도커,깃등주요도구와의통합
셀레늄을사용한E-E테스트자동화
분산파이프라인생성
이책의대상독자
CI/CD파이프라인을구축하는개발자,테스트자동화엔지니어,데브옵스전문가를꿈꾸는중급운영자에게도움이된다.
지은이의말
젠킨스를사용해지속적통합(CI,ContinuousIntegration),지속적제공,지속적배포(CD,ContinuousDeployment)를이해하려는독자를위해이책을집필했다.지속적통합과배포(CI/CD)프로세스를구축하면사용자와관리자는소프트웨어개발과정에서발생하는문제를즉각파악할수있게된다.
젠킨스에대한소개로시작해CI/CD에서의젠킨스아키텍처와역할을다룬다.그리고젠킨스설치방법및환경설정같은기본사항도살펴보며,도구구성및플러그인은물론자격증명과같은보안조치도설명한다.또한유형,섹션등을포함해젠킨스의작업에대해자세히배우고,자바(Java)API프로젝트의작업과구성도알아본다.책의후반부터는파이프라인(pipeline)의생성방법과웹애플리케이션(webapplication)관리에서의역할및분산파이프라인을다룬다.깃(Git)이라는분산버전제어시스템의작동을배우고,SSH같은다양한인증기술을사용해접속하는방법에대한예제와시나리오도알아볼것이다.테스트와관련해서는TestNG를사용한단위테스트와셀레늄(Selenium)도구를사용한종단간(E-E,End-to-End)테스트수행절차를배운다.또한아마존웹서비스(AWS,AmazonWebServices)와같은클라우드환경과젠킨스의통합에대해서도설명한다.젠킨스파이프라인에서사용할재사용가능한라이브러리를만드는방법과젠킨스명령행인터페이스(CLI,CommandLineInterface)및RESTAPI를사용해서버를제어하는방법도다룬다.
이책을학습하면처음프로젝트를시작할때부터젠킨스를사용해CI/CD를구현하는방법과데브옵스를준비할때도움을받을수있다.
옮긴이의말
소프트웨어개발기업의역량을파악하는가장중요한평가요소중에는애플리케이션수명관리(ALM,ApplicationLifecycleManagement)환경을얼마나잘갖추고운영하는지를점검하는항목이있다.여기서말하는ALM은비즈니스의요구사항관리와소프트웨어개발과정을융합하고이를자동화된툴을이용해관리하는것으로,요구사항관리,설계,코딩,테스트,이슈관리,릴리스등을모두포함한다.
하루가다르게진보하는기술의변화속에서소프트웨어개발사가다양한고객의요구를만족시키면서도지속성을유지하려면적은인원으로도효율적으로빠르게운영될필요가있다.ALM환경이얼마나효율적으로운영되는지를통해서기업의역량을간접적으로파악할수가있는것이다.
이제는국내에서도많은기업이배포자동화,품질검증활동자동화등을비즈니스역량과통합해대응하고있으며,이를지원하는도구도다양하다.하지만그중대표적인자동화솔루션인젠킨스가여전히가장높은점유율을갖고있다.
윈도우기반의젠킨스를활용해지속적통합과배포환경을구축하는방법을자세하게다루는이책이유사한환경에서젠킨스자동화솔루션을구축하고관리하는데큰도움이될것이라생각한다.
아쉬운점은젠킨스가아직완벽한한글화가되지않아,영문그대로쓰는경우가많다는것이다.아마이는개발사의규모와상관없이젠킨스를운영관리하는사람은소수이기때문이기도할것이다.이런이유로이책에서는영문버전젠킨스를기본으로하고,필요시우리말로부연설명을하는방식으로독자에게편의를제공하고자했다.