Jenkins Pipeline이란 연속적인 작업들을 Jenkins에서 1개의 Pipeline으로 묶어 관리할 수 있게 만들어주는 Plugin이다.
Jenkins의 기본 작업 단위를 Item이라고 했는데, 이 Item을 연쇄적으로 수행시킴으로써 전체적인 1개의 CI/CD 흐름을 생성 및 관리해주는 Plugin이라고 생각하면 된다.
간단히 말하자면 여러 개의 Item을 하나로 묶어 관리할 수 있게 하는 것이 Jenkins Pipeline이다.
이 과정에서 의문이 생긴다. 굳이 Pipeline을 활용해아할까?
이전까지 우리는 1개의 Item을 가지고서도 충분히 Build 및 배포 과정을 수행할 수 있었다.
Item 1개만으로도 자동화된 CI/CD 과정을 구축할 수 있는데 굳이 배포 과정을 여러 개로 쪼개고 쪼갠 배포 과정을 다시 Pipeline으로 묶어 관리해야 할까?
개인적으로 혼자만 진행하는 프로젝트에서는 Jenkins Pipeline의 필요성이 적고, 오히려 독이 될 수 있다고 생각한다.
하지만 협업 과정에서는 Jenkins Pipeline의 필요성이 두드러진다.
개발 과정에 A, B, C 팀이 참여하며 아래 다이어그램과 같이 업무를 진행한다고 가정하자.
이때 A, B, C 팀을 위한 Item을 각각 1개씩 만든다고 가정해보자.
이 경우 겹치는 작업이 많음에도 불구하고 각 팀의 CI/CD 흐름을 각각 다른 Item으로 처리하기 때문에 어려움이 많이 생긴다.
예를 들어 작업 A에 대해 수정사항이 생겼다고 가정하자. 이 경우 A Item과 C Item에 접속하여 똑같은 변경사항을 적용해야 한다. 만약 변경사항을 적용하다 Human Error가 발생한다면 A팀과 C 팀의 CI/CD 흐름은 완전히 달라져 협업이 깨질 수 있을 것이다.
그나마 작업 A는 2개 Item에 존재하지만 작업 C 같은 것은 3개 팀에 공통적으로 수행되는 절차로써 Human Error의 발생 확률이 더 높아질 것이다.
즉, 모든 팀의 CI/CD 과정에 있어 각각의 Item을 만들어 관리하기에는 유지보수성이 매우 낮아지는 것이다.
하지만 아래 사진과 같이 관리하면 어떻게 될까?
이 경우 작업 C를 1개만 변경하더라도 동일한 변경사항이 A, B, C에 일괄적으로 적용된다. 즉, 유지보수성이 높아지는 것이다. 또한 1개의 절차만 수정해도 모든 팀에 동일한 변경사항이 적용되므로 팀 간 작업에 있어 일관성이 보장된다.
결국 Pipeline을 활용하면 Item(절차)의 재활용성이 높아진다. 또한 Item 변경사항이 모든 Pipeline에 일괄적으로 동일하게 적용되므로 절차에 대한 일관성이 보장된다. 또한 똑같은 절차를 여러 번 관리할 필요가 없고 1번 수정으로 전체 Pipeline에 동일한 수정사항을 적용할 수 있기에 유지보수성이 좋아진다.
이런 점에서 "협업"을 하는 환경에서는 Jenkins Pipeline이 매우 유용하다고 볼 수 있는 것이다.
연속으로 실행될 Item 순서와 각각의 Item이 수행할 절차는 아래와 같다.
참고로 생성할 Image 이름은 violetto/pipeline-project로 지정했고 실행할 Container는 pipeline-server로 지정할 것이다.
Docker Hub에 Image가 존재하지 않고 pipeline-server라는 Container가 실행되고 있지 않음을 확인할 수 있다
Pipeline-First와 Pipeline-Second에 Item에서 Build가 완료한 이후 다음에 실행할 Item을 지정해줘야 할 필요가 있다.
Item > 구성 > 빌드 후 조치 > Build other porjects를 통해 다음에 Build 할 Item을 지정할 수 있다.
Projects to build에 쉼표 구분자(,)를 통해 다음 Build 할 Item을 여러 개 설정할 수도 있다.
참고로 선택할 수 있는 Option들은 아래와 같다.
시간이 지나면 Pipeline-First만 빌드시켰는데 Pipeline-Second, Pipeline-Third까지 모두 빌드되는 것을 볼 수 있다.
이를 통해 정상적으로 Pipeline이 구축되었음을 볼 수 있다.
또한 localhost:8081/hello-world에 접속하여 Container가 정상적으로 실행됨을 확인할 수 있고 Docker Hub에 Image가 새로 등록된 것을 통해 Pipeline에 포함된 모든 Item이 정상적으로 수행되었음을 확인할 수 있다.
위 사진에 빨간색 네모 안에 있는 "+" 버튼을 클릭하면 "New view" Section이 나온다.
이 중 "Delivery Pipeline View"를 선택하여 Pipeline을 시각화한 View를 생성해보자.
나머지 부분은 지금은 설정할 필요 없다.
바로 마지막 Pipelines Section으로 가자. 이후 Components > 추가 버튼을 클릭한다.
위 사진을 통해 4번째 Pipeline이 제대로 실행되었음을 알 수 있다.
#1 ~ #3 과정에 Pipeline-Second 절차가 실행되는 SSH Server에 Docker Login을 하지 않아 Docker Hub에 생성한 Image를 Push하지 못하였는데, 이 문제 때문에 노란색(Unstable) 상태로 중간 종료되었음을 확인할 수 있다.
다시 Pipeline-First Item을 빌드해보면 현재 빌드하는 Item의 진행 상황을 파란색 게이지가 차는 것으로 실시간 확인할 수 있음을 알 수 있다.