Jenkins에서 CI 프로세스를 정의하는 2가지 방법

Lee Sanghyup
6 min readAug 30, 2020

--

1. Freestyle Project

Freestyle project라고는 하지만 jenkins에서 기본 틀을 정해주고 안에 빈칸을 채우는 형식으로 프로세스 흐름을 정의하는 방식입니다. 예전에는 이 방식을 많이 썼던 것 같습니다.

Freestyle project 의 설정화면

프로젝트를 생성하면 위처럼 기본 골격은 이미 잡혀 있으며 각 단계에서 형상관리 도구와 어떻게 연결을 할 지 또는 빌드, 테스트 등의 구체적인 세부 내용은 어떻게 되는지를 직접 작성해 주면 됩니다.

위에서 보이는 대로 대부분의 설정 내용은 체크박스나 간단한 텍스트 입력으로 처리를 하고, 빌드나 테스트 등 source code를 가지고 이루어지는 세부 작업은 아래 그림처럼 주로 리눅스 bash 스크립트를 직접 짜서 설정해 줘야 합니다.

Freestyle Project 방식의 장단점

장점

  • 진입장벽이 낮음
  • 기존 사용사례가 많아 웹상에 참고 할 자료가 비교적 풍부

단점

  • 커스터마이징이 제한적
  • 테스트 혹은 빌드 등의 작업에서 병렬처리 미지원
  • 다수의 형상관리 Repository와 연계하여 사용할 수 없음

저는 처음에는 Freestyle project로 회사에 구축을 해놨다가 프로젝트 규모가 커지면서 Freestyle project에서는 처리할 수 없는 문제가 발생해서 Pipeline 방식으로 전체 프로젝트를 이전했습니다.

2. Pipeline

Pipeline이라는 용어는 소프트웨어 분야에서만 쓰이는 용어는 아니고 유사한 의미로 아래처럼 다양한 분야에서 사용되고 있습니다.

Jenkins에서의 Pipeline도 비슷한 의미로 한 곳에서부터 작업을 시작해서 일렬로 혹은 여러갈래로 뻗어져 나갔다가 다시 한 쪽으로 모이면서 마무리되는 방식의 작업 흐름을 의미합니다. 위처럼 일렬로만 정의할 수도 있고 아래처럼 여러 갈래고 나눴다가(병렬처리) 다시 모이게 정의할 수도 있습니다.

출처 — https://www.moori.nl/blog/continuous-integration-and-delivery-jenkins-pipelines-blue-ocean/

따지고 보면 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://12bme.tistory.com/151

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

--

--