버전 1 쓰다가 끊키지 않고 배포하는 것을 말하는데 ECS를 사용하면 이를 편리하게 구축할 수 있다.
즉, CI/CD란 각각의 개발자들이 개발을 하는 개발환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을 지속 가능한 형태로 또 가능하다면 자동으로 해서 개발자와 사용자 사이의 격차를 없애는 것이다. 이러한 과정에는 코드를 빌드하고, 테스트하고 배포하는 활동이 있다.
1.3 CI/CD 파이프라인
2. 젠킨스란 무엇인가?
2.1 젠킨스 기본 개념
Java Runtime Environment에서 동작
다양한 플러그인들을 활용해서 각종 자동화 작업을 처리할 수 있다.
AWS 배포, 테스트, 도커 빌드 등 할게 너무 많으니 각각의 컴포넌트들을 하나의 플러그인으로 모듈화를 해놓았는데 이를 활용하여 사용하면 된다.
가장 핵심적인 파이프라인, 시크릿 키마저도 플러그인으로 동작시킬 수 있다.
즉 일련의 자동화 작업의 순서들의 집합인 Pipeline을 통해 CI/CD 파이프라인을 구축한다.
플러그인들을 잘 조합해서 돌아가게 하는 게 Pipeline이라고 할 수 있다.
2.2 젠킨스의 대표 Plugins
Credentials Plugin
Jenkins는 그냥 단지 서버이기 때문에 배포에 필요한 각종 리소스에 접근하기 위해서는 여러 가지 중요 정보들을 저장하고 있어야 한다.
리소스에는 클라우드 리소스 혹은 베어메탈에 대한 ssh 접근 등을 의미한다.
베어메탈이란 어떠한 소프트웨어도 담겨 있지 않은 하드웨어를 가리킨다.
AWS token, Git access token, secret key, ssh(username, password)등의 정보들을 저장할 때 사용한다.
위와 같이 중요한 정보들을 저장해주는 플러그인
젠킨스는 Private Network에 떠있기 때문에 보안상 너무 걱정하지 않아도 된다.
Git Plugin => jenkins에서 git에 대한 소스코드를 긁어와서 빌드할 수 있도록 도와줌
Pipeline => 핵심 기능인 파이프라인마저도 플러그인이다.
Docker plugin and Docker Pipeline => Docker agent를 사용하고 jenkins에서 도커를 사용하기 위한 플러그인
3. 젠킨스의 PinpeLine 깊게 살펴보기
3.1 Pipeline
파이프라인이란 CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성
즉 여러 플러그인들을 이 파이프라인에서 용도에 맞게 사용하고 정의함으로써 파이프라인을 통한 서비스가 배포된다.
Pipeline DSL(Domain Specific Langage)로 작성됨.
젠킨스가 동작되기 위해서는 여러 플러그인들이 파이프라인을 통해 흘러가는 과정이라고 할 수 있음
3.2 Pipeline을 구성하는 요소
파이프라인이란 CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성.
즉 여러 플러그인들을 이 파이프라인에서 용도에 맞게 사용하고 정의함으로써 파이프라인을 통해 서비스가 배포됨.
두 가지 형태의 Pipeline Syntax가 존재
Declarative (더 최신이고 가독성이 좋음)
Scripted Pipeline
3.3 Pipeline의 Section의 구성
Sections (가장 큰 개념)
Agent section
Post section
State section
Steps section
4. Pipeline의 Section 깊게 알아보기
4.1 Agent section
젠킨스는 많을 일을 해야 하기 때문에 혼자 하기 버겁다.
여러 slave node를 두고 일을 시킬 수 있는데, 이처럼 어떤 젠킨스가 일을 하게 할 것인지를 지정한다.
젠킨스 노드 관리에서 새로 노드를 띄우거나 혹은 docker이미지를 통해 처리할 수 있다.
쉽게 말하면 젠킨스를 이용하여 시종을 여러 명 둘 수 있는데 어떤 시종에게 일을 시킬 것이냐 하는 것을 결정하는 것이다.
예를 들어 젠킨스 인스턴스가 서버 2대에 각각 떠있는 경우, 마스터에서 시킬 것인지 slave에서 시킬 것인지를 결정할 수 있다.
젠킨스 노드만 넣을 수 있는 것이 아니라 젠킨스 안에 있는 docker container에 들어가서 일을 시킬 수도 있다.
"nodejs안에서 뭔가를 해"라고도 명령을 시킬 수 있다.
4.2 Post section
스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있다.
각각의 단계별로 구별하면 다음과 같다.
성공 시에 성공 이메일, 실패하면 중단 혹은 건너뛰기 등등, 작업 결과에 따른 행동을 취할 수 있다.
4.3 Stage Section
어떤 일들을 처리할 것인지 일련의 stage를 정의한다.
일종의 카테고리라고 보면 됨.
ex) 프론트엔드 배포를 위한 스테이지, 등
4.4 Steps Section
한 스테이지 안에서의 단계로 일련의 스텝을 보여줌.
Steps 내부는 여러 가지 스텝들로 구성되며 여러 작업들을 실행 가능
플러그인을 깔면 사용할 수 있는 스텝들이 생겨남
빌드를 할 때 디렉터리를 옮겨서 빌드를 한다던가, 다른 플러그인을 깔아서 해당 플러그인의 메서드를 활용해서 일을 처리한다던지 하는 작업들을 할 수 있다.
플러그인을 설치하면 쓸 수 있는 Steps들이 많아진다.
5. Declaratives 문법 알아보기
5.1 Declaratives
Environment, stage, options, parameters, triggers, when 등의 Declarative가 있음
각 stage안에서 어떠한 일들을 할 것인지 정의하는 게 Declarative이다.
5.2 Declaratives의 단계
Enviroment
Parameter
파이프라인 실행 시 파라미터 받음
Triggers
어떤 형태로 트리거 되는가?
이 파이프라인이 어떤 주기로 실행이 되는가?
When
6. Jenkins Pipeline 구성 예시
6.1 예시 코드
pipeline => agent => stage=> step 순으로 작업이 세분화된다.
위에서는 git에서 branch를 받아와서 디렉터리를 바꾸고 s3파일 업로드를 한 뒤 로그를 찍는 젠킨스 파이프라인의 예제이다.