젠킨스란 소프트웨어 개발시 지속적인 통합(Continuous integration)을 제공해주는 도구이다. 더불어 지속적인 배포환경까지 구축할수 있는 도구 있다.
젠킨스와 같은 CI 도구들이 나오기전에는 일정시간동안 빌드를 실행하는 방식이 일반적이였다. 특히 개발자들이 당일 작성한 소스코드들이 커밋이 되는 심야 시간대에 이러한 빌드 타이머가 집중적으로 실행되었는데 이것을 Nightly-Build라고 한다.
Jenkins는 빌드, 테스트, 배포 프로세스를 자동화하여 개발자의 시간 절약과 개발 생산성을 높일수 있다. 게다가 SVN,Git과 같은 버전관리 시스템과 연동하여 커밋을 감지하면 빌드가 작동되도록 설정도 할수 있다.
Credentials Plugin
Git Plugin
Pipeline
Docker plugin ans Docker Pipeline
지금은 Docker를 사용하지 않아 해당 플러그인을 사용하지 않았는데 추후 Docker를 적용할때 사용해봐야겠다.🤣
젠킨스 파이프라인이란?
CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인의 집합이자 구성
젠킨스의 Pipeline을 작성하는데 Declarative, Scripted 방식이 있다. 이 두가지는 문법적인 차이점이 있다. Declarative방식이 Scripted방식보다 더 풍부한 구문 기능을 제공하며 간편하게 작성할수 있다.
Pipeline
Jenkinsfile
의 시작 지점에 선언Node
Jenkinsfile
의 시작 지점에 선언Stage
Step
stage
안에 작업을 정의하는 부분Jenkinsfile
을 작성하는 문법이다. Groovy
문법과 비슷하지만 약간의 차이점이 있다.
선언형 파이프라인 문법
은 인터넷에 검색해보면 잘 나오기 때문에 큰틀의 개념을 정리할 것이다.
//Jenkinsfile
pipeline {
agent any //Agent Sections
stages { //Stages Sections
stage('Prepare') { //Steps
agent any
steps {
...
}
post { //Post Section
failure{
error "Fail Cloned Repository"
}
}
}
stage('Build') {
agent any
steps{
...
}
post{
failure{
error 'Fail Build'
}
}
}
}
}
Pipeline의 Sections의 구성 - Sections에 아래의 항목들이 포함된다.
Agent Section: 여러 slave를 두고 작업을 할때 어떤 젠킨스가 일을 할지 정의
Post Section: 각 스테이지가 끝난후 후속 조치기능을 정의 (ex.Success, Failure, always, cleanup)
Stages Section: 어떤 일을 처리할것인가에 대한 Stage 정의(ex. git clone, build, test, devlop)
Steps: 스테이지안에서 실행할 작업을 정의
Declaratives
: Environ ment (파이프라인 및 stage scope의 환경변수 설정)
: Parameter (파이프라인 실행시에 받을 파라미터)
: Triggers (어떤 형태로 트리거 되는지 정의)
: When (언제 실행되는지 정의)
각 항목에 세부적인 문법, 옵션도 다양하게 존재하지만 이 부분은 필요에 따라 찾아보면 될거 같다.
젠킨스에서 Pipeline은 한곳에서 작업을 시작해서 일렬로 혹은 여러갈래(병렬처리)로 뻗어나갔다가 다시 한곳으로 모이면서 마무리되는 작업의 흐름입니다.
Freestyle project 방식은 앞서 말했던 정의한 파이프라인이 사실 일렬로만 처리되는 Pipeline 입니다.
그렇기 때문에 파이프라인의 구조를 마음대로 바꿀수 없고 커스텀마이징 또한 할수 없습니다.
예를 들어 한프로젝트에서 2곳의 git repository에 접근하여야 되는 상황에서 Freestyle project은 접근 방법을 지원하지 않고 한곳에서만 인증을 받아 clone을 할수 있습니다.
그치만 진입장벽 측면, 참고할자료가 많은 측면에서는 Freestyle project가 좋다고 합니다.
저는 처음에 Jenkins에 대해서 공부하고 연습해볼때는 Freestyle project를 사용해보았지만 이번에는 Pipeline project를 이용하여 Jenkins Pipeline을 구축한 내용을 정리해보겠습니다.