본문 바로가기
프로젝트/Careers

Jenkins를 사용한 CI 구성

by 에어컨조아 2021. 8. 5.

젠킨스의 설치 과정은 공식사이트에 잘 설명되어 있으니 설치방법에 대해서는 링크로 대신하겠습니다.

Jenkins를 설치했으면 정상적으로 서비스가 동작하는지 확인합니다.

sudo systemctl start jenkins
sudo systemctl stop jenkins
sudo systemctl restart jenkins

Jenkins는 기본 포트가 8080이며, 혹시라도 접속이 안될 시 방화벽을 확인합니다.

CI를 사용할 프로젝트를 생성합니다.

생성 시 Pipeline을 선택합니다.

그리고 Github에 pull request를 수신하기 위해서는 플러그인을 설치해야 합니다.

GitHub Pull Request Builder 플러그인을 설치합니다.

플러그인을 설치 후 아까 만들어둔 프로젝트 설정으로 돌아옵니다.

깃허브 url 주소를 설정할때 주의사항이 있습니다.

바로 url 뒤에 .git을 제거해야 합니다. 이를 제거하지 않으면 나중에 pull request할때 연동이 실패합니다... 이 url때문에 엄청난 시간을 소비해야만 했습니다.. 😭

GitHub Pull Request Builder 설정

  • Pull Request 요청을 수신하기 위해 좀 전에 설치한 Github pull request builder를 선택합니다.
  • pull request 요청하는 유저들을 Admin list에 추가합니다.
  • 깃헙에서 웹 훅을 수신하기위해 체크합니다.

GitHub hook trigger for GITScm polling
repository에 push할때 이벤트감지를 하기위해 설정합니다.

마지막으로 웹 훅을 통해 Pull Request 요청이 들어오면 수행할 파이프라인을 구성합니다. Jenkins에서 스크립트를 작성하여 직접 관리 할 수 있지만 Jenkins 스크립트도 버전관리를 하는 것이 추후 관리가 편할 것 같아 SCM을 사용하였습니다.

Credentials 설정은 SSH Username with private key를 통해 계정을 설정합니다. 이를 하기위해서는 Jenkins 서버에서 접근할 수 있도록 ssh-keygen을 통해 ssh키를 만든 후 해당 pub키를 해당 깃허브 프로젝트에 연동시키면 됩니다.

Branch Specifier는 여러 Branch 중 어떠한 Branch를 기준으로 수행할 지 설정하는 곳 입니다. ${sha1}은 요청들어온 Branch를 수행하도록 설정하는 값 입니다. 여러 설정들은 공식사이트에서 확인할 수 있습니다.

마지막으로 CI를 수행하는 스크립트 파일명을 정확히 입력하면 Jenkins의 설정은 완료됩니다.

깃허브로 돌아와서 webhooks설정을 확인하여 정상적으로 두개의 훅이 잡혀있는지 확인합니다.

설치 시 주의사항

설치 서버는 최소사양보다 높게 잡자

여러 클라우드 서비스가 있지만 30만 크레딧을 추가로 받은 네이버 클라우드를 사용하고 있습니다.

젠킨스를 서버에 설치하기 전 젠킨스의 최소사양을 확인해 보았습니다.

Hardware requirements:

  1. You need minimum 256 MB of RAM in your computer or laptop to install Jenkins.
  2. You need at least 1 GB of space in your hard drive for Jenkins.

네이버 클라우드가 무료로 제공하는 Micro 서버를 사용해도 충분할 것이라 판단하였지만 다양한 문제가 발생하였습니다.

플러그인 설치가 정상적으로 안된다던가.. 프로젝트 빌드를 하면 1시간 이상이 걸리던가.. 🤪

그래서 이것저것 트러블 슈팅하다가 결국엔 서버 성능 문제로 판단하여 한 단계 올리니 모든 문제들이 해결되었습니다.

Jenkins 설치도중 에러

Failed to start LSB : Start Jenkins at boot time. 이라는 에러가 발생했습니다.

찾아보니 Java가 설치되어 있지 않거나 Jenkins의 버전과 호환되지 않는 버전이 설치되어 있다면 발생하는 에러였습니다. 그래서 Java를 설치하니 정상적으로 설치되었습니다.

Jenkins는 자바로 만들어 졌으므로 JVM위에서 동작합니다.

현재 Jenkins는 Java 8, 11을 지원한다고 합니다.

그리고 java 프로젝트를 빌드하기 위해서는 gradle도 설치하여야 합니다.

하지만 깃헙에서 프로젝트를 클론받아 gradlew를 사용할 것이므로 별도의 설치를 하지 않았습니다.

Reference

https://taetaetae.github.io/2020/09/07/github-pullrequest-build/
https://plugins.jenkins.io/ghprb/

댓글