💡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