Jenkins에서 CI 프로세스를 정의하는 2가지 방법
1. Freestyle Project
Freestyle project라고는 하지만 jenkins에서 기본 틀을 정해주고 안에 빈칸을 채우는 형식으로 프로세스 흐름을 정의하는 방식입니다. 예전에는 이 방식을 많이 썼던 것 같습니다.
프로젝트를 생성하면 위처럼 기본 골격은 이미 잡혀 있으며 각 단계에서 형상관리 도구와 어떻게 연결을 할 지 또는 빌드, 테스트 등의 구체적인 세부 내용은 어떻게 되는지를 직접 작성해 주면 됩니다.
위에서 보이는 대로 대부분의 설정 내용은 체크박스나 간단한 텍스트 입력으로 처리를 하고, 빌드나 테스트 등 source code를 가지고 이루어지는 세부 작업은 아래 그림처럼 주로 리눅스 bash 스크립트를 직접 짜서 설정해 줘야 합니다.
Freestyle Project 방식의 장단점
장점
- 진입장벽이 낮음
- 기존 사용사례가 많아 웹상에 참고 할 자료가 비교적 풍부
단점
- 커스터마이징이 제한적
- 테스트 혹은 빌드 등의 작업에서 병렬처리 미지원
- 다수의 형상관리 Repository와 연계하여 사용할 수 없음
저는 처음에는 Freestyle project로 회사에 구축을 해놨다가 프로젝트 규모가 커지면서 Freestyle project에서는 처리할 수 없는 문제가 발생해서 Pipeline 방식으로 전체 프로젝트를 이전했습니다.
2. Pipeline
Pipeline이라는 용어는 소프트웨어 분야에서만 쓰이는 용어는 아니고 유사한 의미로 아래처럼 다양한 분야에서 사용되고 있습니다.
Jenkins에서의 Pipeline도 비슷한 의미로 한 곳에서부터 작업을 시작해서 일렬로 혹은 여러갈래로 뻗어져 나갔다가 다시 한 쪽으로 모이면서 마무리되는 방식의 작업 흐름을 의미합니다. 위처럼 일렬로만 정의할 수도 있고 아래처럼 여러 갈래고 나눴다가(병렬처리) 다시 모이게 정의할 수도 있습니다.
따지고 보면 Freestyle project도 사실 일렬로만 처리되는 Pipieline이라고 볼수 있습니다. 하지만, 파이프라인 구조를 마음대로 변경하거나 하는 추가적인 커스터마이징을 할 수 없기 때문에 특별한 이유가 없으면 Pipeline으로 project를 생성해서 관리하는게 훨씬 낫습니다.
Pipeline Project 방식의 장단점
장점
- 진입장벽이 비교적 높음
- 기존 사용사례가 적어 웹상에 참고 할 자료가 적음
단점
- 커스터마이징의 폭이 넓음
- 테스트 혹은 빌드 등의 작업에서 병렬처리 지원
- 다수의 형상관리 Repository와 연계하여 사용할 수 있음
저같은 경우 위 단점에서 3번째 문제 때문에 Pipeline으로 넘어오게 됐는데요. gitlab에서 소스코드를 받아서 빌드, 테스트 등을 하는 것 까지는 문제없이 잘 됐지만 Fabric을 통해 Live와 Staging서버로 배포할 때는 또 다른 gitlab repository에서 Fabric 소스코드를 받아 해당 스크립트를 실행하게 구축하려고 했습니다만, 확인결과 Freestyle project에서는 한 프로젝트에서 2곳의 소스코드 repository에 접근하는 방법을 지원하지 않았습니다.(한 곳에서만 인증을 받아 git clone등의 명렁어로 코드를 내려받을 수 있도록 구조가 짜여져 있습니다.)
Pipeline 방식에서는 모든 절차를 직접 Groovy라는 프로그래밍 언어로 작성합니다.(그렇기 때문에 거의 모든 부분을 커스터마징 가능합니다)
프로그래밍 언어를 또 배워야 하나 하고 부담될 수 있는데 저같은 초보자도 기본적인 내용은 하루안에 다 익혀서 사용할 수 있었기 때문에 큰 걱정은 안 하셔도 됩니다.
결론
Freestyle project는 기능적으로 제한이 많으니
특별한 이유가 없으면 무조건 Pipeline project로 생성합시다^^
참조
https://ko.wikipedia.org/wiki/지속적 통합
https://www.redhat.com/ko/topics/devops/what-is-ci-cd
https://aws.amazon.com/ko/devops/continuous-integration/
https://asfirstalways.tistory.com/303
https://www.slideshare.net/ssuser2f0173/devops-41731364
https://aws.amazon.com/ko/devops/what-is-devops/
https://medium.com/@simsimjae/devops란 무엇인가%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-c50f4d86666b
http://www.ktword.co.kr/abbr_view.php?m_temp1=1180
https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EA%B7%B8%EB%A3%A8%EB%B9%84