티스토리 뷰


젠킨스는 소프트웨어 개발의 지속적인 통합을 도와주는 대표적인 오픈소스 도구입니다. 비슷한 서비스로 Travis 그리고 GitLab에서 제공하는 CI 파이프라인도 있습니다. Travis는 오픈소스를 제외하고는 유료로 사용해야하는 제약사항이 있고, GitLab은 이번에 새로운 프로젝트를 시작하면서 우연히 사용하게 되면서 CI 통합 툴킷이 있다는 것을 처음 알게 되었습니다. GitLab CI도 오픈소스이며 빌드 스크립트를 작성하는 방식은 Travis에 더 가까운 것 같은데 시작하거나 사용하기 쉽다고 합니다. GitLab에서 제공하는 Jenkins와 GitLab CI를 비교 글을 참고해봐도 좋을 것 같습니다.


사실 항상 CI/CD에 대한 개념이나 로망만 가지고 있다가 실제로 CI 도구를 사용해 빌드 및 배포 자동화 환경까지 구성해본 것은 이번이 처음이었는데 젠킨스는 정말 생각했던것 보다 더 쉽게 배포환경을 구성할 수 있어서 조금 더 일찍 시도해볼걸 하는 생각도 들었습니다.


배포 환경을 구성하기까지 크게 다음과 같은 과정을 필요로 했습니다.


  1. 서버 2개 준비 (배포용 서버, 젠킨스 서버)

  2. 배포용 서버에 우선 서버 1차 배포

  3. 젠킨스 설치

  4. 젠킨스 서버 접속 및 계정 초기화

  5. 플러그인 설치 (GitLab, Github 등 연동할 저장소 관리자 선택)

  6. 배포 서버에서 젠킨스 서버의 접근을 허용 (SSH)

  7. 젠킨스 작업 생성

    1. 앞서 설치한 플러그인이 제공하는 webhook을 이용해 언제 코드를 pulling할지 선택

    2. test 실행

    3. 배포 스크립트


과정을 쓰고 나서 보니 단계가 길어보이긴 하지만 하나씩 보면 설치 과정이 많고 젠킨스 GUI에서 설정해주는 부분이라 시간이 오래걸리진 않습니다.


처음 하면서 실수로 또는 설정을 하던중 비정상적인 케이스이외를 경험을 했는데 혹시 같은 실수가 있을진 모르겠지만 공유를 드리자면,


첫번째로 젠킨스를 설치하고 나면 바로 jenkins가 실행이 되는게 정상인데 service jenkins status 확인을 해보니 failed이 나 있었습니다. 원인은 젠킨스 서버에 젠킨스 환경에 필요한 JDK 설치가 되어 있지 않아서였고 다음과 같이 JDK 설치 후 환경 설정을 해주어서 해결했습니다.


  • set java runtime environment path

    • sudo apt install openjdk-8-jre

    • sudo vim /etc/init.d/jenkins

    • line 16

      • PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/lib/jvm/java-8-openjdk-amd64/bin/

  • sudo service jenkins start

  • sudo service jenkins status


두번째, 젠킨스의 배포서버로의 SSH 허용을 해줄 때 젠킨스 서버에서는 jenkins라는 사용자 권한이 젠킨스 설치 시 생성이 됩니다. 그 권한에서 SSH 허용을 해주어야 하는데 잘못해서 다른 권한에서 주었다가 접근이 되지 않아서 시간이 걸렸었습니다.


설정을 마친 후부터 git push 를 할 때마다 젠킨스에서는 제가 설정한 테스트 명령을 수행한 뒤 문제가 발생하면 오류 정보와 함께 빌드 실패 메시지를 성공하면 배포서버에 곧바로 배포해줍니다. 이제 직접 테스트를 실행하지 않고, 배포서버에 직접 접속해 git pull 을 한 뒤 서버를 재시작할 필요없이 배포 과정을 자동화할 수 있게 되었습니다. 젠킨스의 가장 기본적인 기능만 사용하긴 했지만 기존에 CI를 사용하지 않았던 때와 비교하면 생산성 향상에 큰 도움이 될 거라 생각합니다.


Node.js 서버와 젠킨스를 이용한 CI 환경 구축을 해보고 싶으신 분들은 참고문헌 링크를 참고하시면 좋을 것 같습니다.


참고문헌

https://medium.com/@mosheezderman/how-to-set-up-ci-cd-pipeline-for-a-node-js-app-with-jenkins-c51581cc783c


댓글