개요

이 글은 T아카데미의 세미나 영상 을 보고 제가 다시 보기 위해 정리하는 글입니다.

CI/CD?

CI

  • Continuous Integration : 지속적인 통합
  • 뭘 통합하나 ?
    • 여러 개발자의 코드베이스를 계속해서 통합
  • 없다면?
  1. 10명의 개발자가 열심히 개발을 한다.
  2. Merge 어케하지..?
  • 있다면?
  1. 10명의 개발자가 열심히 개발을 한다.
  2. 커밋!
  3. 로컬 테스트 통과 실패 ㅠ
  4. 다시 커밋!
  5. 코드 베이스 Merge
  6. 만족!

테스트가 되어 있지 않은 무서운 코드를 애초에 없앤다!

CD

  • Continuous Delivery : 지속적인 배달

  • 뭘 배달해??

    • 사용자에게 제품(서비스)을 지속적으로 배달
    • 코드베이스가 항상 배포가능한 상태를 유지하는 것.
  • 즉, CI/CD란, 개발 환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을

  • 지속 가능한 형태로, 가능하다면 자동으로 해서

  • 개발자와 사용자 사이의 격차를 없애는 것!

  • 코드 작성 -> 빌드 -> 테스트 -> 배포

  • 없다면?

  1. 백엔드 코드 개발
  2. 프론트와 통신 해야하니 배포를 해볼까?
  3. 저기 배포좀 해주세요..
  4. 앗 버그났는데 다시 배포좀..
  5. 데브 서버에 누가 배포했나요? 제꺼 안되는데;;
  6. 앗 죄송..
  7. QA 배포..
  8. 프로덕션 배포시 초긴장 유지..
  9. 개발자가 코드만 짜면 되지 뭐이리 할게 많아 ㅜ
  • 있다면?
  1. 개발
  2. 끝!

What is Jenkins?

  • JRE 위에서 동작하는 자동화 서버.
  • 빌드, 테스트, 배포 등 모든 것을 자동화 해줌.
  • 난 개발만 할거니 니가 다해라!
  • 다양한 플러그인들을 활용해서 각종 자동화 작업을 처리할 수 있음.
  • 플러그인들을 잘 조립해서 , 일련의 자동화 작업의 순서들의 집한인 Pipeline 을 통해 CI/CD 파이프라인 구축.

Plugin

  • 대표적인 플러그인들
  1. Credential Plugin
  • 배포에 필요한 각종 리소스에 접근하기 위해서는 여러가지 중요 정보들을 저장하고 있어야 함.
  • 그런 중요한 정보들(AWS token, Git access token, ...)들을 저장해주는 플러그인.
  1. Pipeline
  • 플러그인들의 집합이자 구성
  • 여러 플러그인들을 파이프라인에서 용도에 맞게 사용하고 정의함으로써, 파이프라인을 통해 서비스가 배포됨.
  • 두 가지 형태의 Syntax 가 존재(Declarative, Scripted Pipeline)
  • Declarative Pipeline Syntax 배울 예정.

Pipeline Syntax

Sections

  1. Agent Section
  • 젠킨스는 많은 일들을 해야 하기 때문에 혼자 하기 버겁다.
  • 여러 slave node 를 두고 일을 시킬 수 있는데, 어떤 젠킨스가 일을 하게 할 것인지 지정함.
  1. Post Section
  • 스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있다.
  • if success -> slack 에 배포됐습니다 띄워준다던지
  1. Stages Section
  • 어떤 일들을 처리할 건지 일련의 stage를 정의함.
  1. Steps Section
  • 한 스테이지 안에서의 단계로 일련의 스텝을 보여줌.

Declaratives

  1. Environment : 어떤 pipeline 이나 stage scope 의 환경 변수 설정
  2. Parameter : 파이프라인 실행 시 파라미터 받음.
  3. Trigger : 파이프라인이 무슨 주기로 실행되는지 설정
  4. When : 언제 실행되는가

Steps

  • Steps 내부는 여러가지 스텝들로 구성
  • 여러 작업들을 실행 가능
  • 플러그인을 깔면 사용할 수 있는 스텝들이 생겨남.

pipeline 예시 코드

pipeline {
    agent any

    stages {
        stage('Prepare') { 
            steps {git pull}
            post { success { echo 'success' }
        }

        stage('Build') { steps { echo 'building...'}}
    }
}
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기