개요
이 글은 T아카데미의 세미나 영상 을 보고 내가 보기 위해 정리하는 글입니다.
CI/CD?
CI
- Continuous Integration : 지속적인 통합
- 뭘 통합하나 ?
- 여러 개발자의 코드베이스를 계속해서 통합
- 없다면?
- 10명의 개발자가 열심히 개발을 한다.
- Merge 어케하지..?
- 10명의 개발자가 열심히 개발을 한다.
- 커밋!
- 로컬 테스트 통과 실패 ㅠ
- 다시 커밋!
- 코드 베이스 Merge
- 만족!
테스트가 되어 있지 않은 무서운 코드를 애초에 없앤다!
CD
-
Continuous Delivery : 지속적인 배달
-
뭘 배달해??
- 사용자에게 제품(서비스)을 지속적으로 배달
- 코드베이스가 항상 배포가능한 상태를 유지하는 것.
-
즉, CI/CD란, 개발 환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을
-
지속 가능한 형태로, 가능하다면 자동으로 해서
-
개발자와 사용자 사이의 격차를 없애는 것!
-
코드 작성 -> 빌드 -> 테스트 -> 배포
-
없다면?
- 백엔드 코드 개발
- 프론트와 통신 해야하니 배포를 해볼까?
- 저기 배포좀 해주세요..
- 앗 버그났는데 다시 배포좀..
- 데브 서버에 누가 배포했나요? 제꺼 안되는데;;
- 앗 죄송..
- QA 배포..
- 프로덕션 배포시 초긴장 유지..
- 개발자가 코드만 짜면 되지 뭐이리 할게 많아 ㅜ
- 개발
- 끝!
What is Jenkins?
- JRE 위에서 동작하는 자동화 서버.
- 빌드, 테스트, 배포 등 모든 것을 자동화 해줌.
- 난 개발만 할거니 니가 다해라!
- 다양한 플러그인들을 활용해서 각종 자동화 작업을 처리할 수 있음.
- 플러그인들을 잘 조립해서 , 일련의 자동화 작업의 순서들의 집한인 Pipeline 을 통해 CI/CD 파이프라인 구축.
Plugin
- Credential Plugin
- 배포에 필요한 각종 리소스에 접근하기 위해서는 여러가지 중요 정보들을 저장하고 있어야 함.
- 그런 중요한 정보들(AWS token, Git access token, ...)들을 저장해주는 플러그인.
- Pipeline
- 플러그인들의 집합이자 구성
- 여러 플러그인들을 파이프라인에서 용도에 맞게 사용하고 정의함으로써, 파이프라인을 통해 서비스가 배포됨.
- 두 가지 형태의 Syntax 가 존재(Declarative, Scripted Pipeline)
- Declarative Pipeline Syntax 배울 예정.
Pipeline Syntax
Sections
- Agent Section
- 젠킨스는 많은 일들을 해야 하기 때문에 혼자 하기 버겁다.
- 여러 slave node 를 두고 일을 시킬 수 있는데, 어떤 젠킨스가 일을 하게 할 것인지 지정함.
- Post Section
- 스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있다.
- if success -> slack 에 배포됐습니다 띄워준다던지
- Stages Section
- 어떤 일들을 처리할 건지 일련의 stage를 정의함.
- Steps Section
- 한 스테이지 안에서의 단계로 일련의 스텝을 보여줌.
Declaratives
- Environment : 어떤 pipeline 이나 stage scope 의 환경 변수 설정
- Parameter : 파이프라인 실행 시 파라미터 받음.
- Trigger : 파이프라인이 무슨 주기로 실행되는지 설정
- When : 언제 실행되는가
Steps
- Steps 내부는 여러가지 스텝들로 구성
- 여러 작업들을 실행 가능
- 플러그인을 깔면 사용할 수 있는 스텝들이 생겨남.
pipeline 예시 코드
pipeline {
agent any
stages {
stage('Prepare') {
steps {git pull}
post { success { echo 'success' }
}
stage('Build') { steps { echo 'building...'}}
}
}