Jenkins?

💡CI/CD에 활용되는 Jenkins에 대하여 학습하여 정리하였습니다.

Jenkins

  • Jenkins는 오픈소스 자동화 서버로, 소프트웨어 개발 과정에서 지속적인 통합과 지속적인 배포(CI/CD)를 돕는 도구입니다.
  • 다양한 플러그인과 함께 사용되며, 이를 통해 빌드, 테스트, 배포와 같은 작업을 자동으로 실행할 수 있습니다.

 

CI/CD 파이프라인

Jenkins의 특징

  • Java Runtime Environment에서 동작합니다.
  • 다양한 플러그인들을 활용하여 각종 자동화 작업을 처리할 수 있습니다.
  • 일련의 자동화 적읍의 순서들의 집합인 pipeline을 통해 CI/CD 파이프라인을 구축할 수 있습니다.
  • 플러그인들을 조합해 파이프라인을 구축할 수 있습니다.

 

Jenkins Plugins

Credentials Plugin

  • 배포에 필요한 각종 리소스에 접근하기 위한 정보들을 저장하고 있습니다.
  • 리소스는 클라우드 리소스 or 베어메탈에 대한 ssh 접근 등에 대한 정보를 가집니다.
    • 베어메탈 : 어떠한 소프트웨어도 담겨 있지 않은 하드웨어
  • AWS token, Git access token, secret key, ssh 등의 정보를 저장하는 플러그인입니다.
  • 기본적으로 Private Network 상에서 동작하기 때문에 보안이 보장됩니다.

Git Plugin

  • jenkins에서 git의 소스코드를 읽어와서 빌드할 수 있도록 도와줍니다.

Pipeline

  • 핵심 기능으로, 플러그인들을 포함하는 파이프라인도 플러그인에 포함됩니다.

Docker plugin and Docker Pipeline

  • Docker agent를 사용하고 jenkins에서 도커를 사용하기 위한 플러그인으로 활용됩니다.

Pipeline

  • CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성입니다.
  • 파이프라인을 용도에 맞게 사용하고 정의함으로써 여러 플러그인을 통해 서비스를 배포할 수 있습니다.
  • Pipeline DSL(Domain Specific Language)로 작성되는 특징이 있습니다.

구성 요소

  • 두 가지 형태의 Pipeline Syntax가 존재하며, Declarative이 가독성과 최신 버전을 보장합니다.
    • Declarative
    • Scripted Pipeline

Pipeline Section

  • Agent section
    • 여러 젠킨스 중에 어떤 젠킨스가 일을 할 지 지정하며, 젠킨스 인스턴스가 여러개 떠있는 경우 어떻게 배정할 지 결정합니다.
  • Post section
    • 스테이지가 끝난 이후의 결과에 따라 후속 조치를 행하며, 성공 시 이메일을 보내거나 실패 시 건너뛰기 등의 행동을 취할 수 있습니다.
  • Stage section
    • 카테고리의 개념이며, 어떤 일들을 처리할지 일련의 stage를 정의합니다.
  • steps section
    • 한 스테이지 안에서 단계로 일련의 스텝을 나타냅니다.

 

Jenkins 작업 순서

  • pipeline > agent > stage > step 순으로 작업을 세분화합니다.
pipline {
	agent any
	
	stages {
		stage('first'){
			steps {

			}
		}
		stage('second'){
			steps {

			}
		}
	}
}

 

GitHub Actions와 차이는?

  • 두 도구 모두 CI/CD에 사용되지만, 어떤 차이가 있는지 알아보았습니다.
  • 가장 큰 차이는 Jenkins는 온프레미스 또는 클라우드 서버에 설치하고 직접 관리해야 하지만, GitHub Actions는 GitHub 내에서 바로 사용할 수 있는 클라우드 기반 서비스입니다.

Jenkins의 선택 이점

  • 플러그인의 사용자 정의와 커스터마이징이 뛰어나며, 복잡한 워크플로와 독립적인 빌드 파이프라인을 구축할 수 있습니다.
  • 서버 환경을 완전히 통제하여 커스터마이징에 유리하며, 대규모 프로젝트에 적합합니다.
  • 또한 에이전트 시스템을 사용한 분산 빌드를 지원하므로, 복잡한 다중 환경에서 동시 작업을 수행할 수 있습니다.

GitHub Actions의 선택 이점

  • GitHub Actions는 YAML 파일로 간단하게 워크플로를 정의할 수 있으며, 별도의 설치 없이 GitHub의 UI 내에서 설정이 가능합니다.
  • GitHub와 긴밀하게 통합되어 있어, GitHub 사용 개발자에게 매우 직관적이고 편리함을 제공합니다.
  • 사용량에 따라 과금이 부과되긴 하지만, 기본적으로 무료 계층을 제공합니다.

 

참고

https://medium.com/prnd/안드로이드-jenkins-ci서버-에서-빌드시간을-90-줄이는-4가지-방법-176ee9378f1f

https://velog.io/@bbkyoo/Jenkins