CI/CD

yookyungmin·2023년 4월 11일
0

CI 란?

  • Continuous Integration
  • 여러 개발자들의 코드 베이스를 계속해서 통합하는것
  • 쉽게 말해 코드를 통합한다는 것

CD 란?

  • Continuous Delivery
  • 사용자에게 제품을 지속적으로 서비스를 배달.
  • 항상 배포 가능한 상태를 유지하는 것을 말한다.
  • 지속적인 서비스 제공(Continuous Delivery) 혹은 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용된다. 두 가지 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지 설명하기 위해 별도로 사용되기도 한다.

즉 CI/CD란 각각의 개발자들이 개발을 하는 개발환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을 지속 가능한 형태로 또 가능하다면 자동으로 해서 개발자와 사용자 사이의 격차를 없애는 것이다. 이러한 과정에는 코드를 빌드하고, 테스트하고 배포하는 활동이 있다.

CI / CD PIPLINE

CI가 없으면 생기는 문제

  • 지속적으로 코드가 통합이 안되고 한번에 여러명의 코드를 합치다 보면 문제가 생길수 있다.

CD가 없으면 생기는 문제

  • 코드를 작성하자마자 즉시 즉시 배포를 하지 않는다면 배포를 주기적으로 해야하는 번거로움이 있다.

젠킨스

  • Java Runtime 위에서 동작하는 자동화 서버
  • 다양한 플러그인들을 활용해서 각종 자동화 작업을 처리할 수 있음
  • 빌드, 테스트, 배포 등 모든 것을 자동화 해주는 자동화 서버
  • 일련의 자동화 작업의 순서들의 집합인 Pipeline을 통해 ci/cd 파이프라인을 구축함

젠킨스 Pulgin 살펴보기

  • Credentials Plugin
    젠킨스는 그냥 단지 서버일 뿐이기 때문에 배포에 필요한 각종 리소스에 접근하기 위해서는 여러가지 중요 정보들을 저장하고 있어야 한다.
    이런 중요한 정보(aws token, git access)등을 저장해 주는 플러그인

  • Pipeline Plugin
    젠킨스 핵심 기능인 Pipeline 을 관리할수 있게 해준다.

  • Docker Plugin and Docker Pipeline
    Docker agent 를 사용하고 jenkins 에서 도커를 사용하기 위함

Pipeline

  • 파이프라인이란 CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성
    즉 여러 플러그인들을 이 파이프라인에서 용도에 맞게 사용하고 정의함으로써 파이프라인을 통해 서비스가 배포됨
    Pipeline DSL로 작성 / 자기 멋대로 만든 랭귀지

Pipeline Syntax

Sections

  • Agent sections
    여러 slave node를 두고 일을 시킬 수 있는데 어떤 젠킨스가 일을 하게 할것인지를 지정한다.

  • Post sections
    스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있다.
    각각의 단계별로 구별하면 다음과 같다.
    success
    failure
    always
    cleanup

  • Stage section
    어떤 일들을 처리 할것인지 일련의 stage를 정의한다.
    일종의 카테고리
    ex)빌드하는 스테이지, 프론트 엔드 배포하는 스테이지

  • Steps section
    한 스테이지 안에서의 단계로 일련의 스탭을 보여줌

  • Declaratives
    Environment : 어떠 Pipeline이나 stage scope의 환경변수를 설정함.
    parameters : 파이프라인 실행시 파라미터 받음
    triggers : 파이프라인이어 어떤 주기로 실행되는가?
    when : 언제 실행 되는가?
    각 stage안에서 어떠한 일들을 할 것인지 정의하는 게 Declarative이다.

pipeline {
    agent any // 어떤 jenkins에 일을 시킬것인가
    stages {
        stage('Prepare') {
            steps {
         		git url:'https://github.com/frontalnh/pet-insurance.git',
                	branch: 'master',
                	credenitalsId: 'jenkinsgit'
                sh 'ls'
                dir(',/docs'){
                	sh '''
                	aws s3 sync ./ s3://namhoontest
                    //1. git 에서 branch를 떙겨와라
                    //2. 디렉토리를 바꿔서 s3를 업로드를 해라
                }
        }
        post {
            //If maven was able to run the tests
            success{
            	echo 'success' //이후에 success로그를 찍어라
            }
        }
        stage('bulid'){
        	steps{
        		ehco 'bulding...'
        }
    }
}

참고문헌
https://www.youtube.com/watch?v=JPDKLgX5bRg&t=1232s

0개의 댓글