Intro
웹 기술
을 주제로 하는 공통 프로젝트에서, CI/CD 환경을 구축하기 위해 학습해보았다.
Main
Jenkins란 ?
모든 언어의 조합과 소스코드 레포지토리에 대한
CI/CD
환경을 구축하기 위한 도구
- CI (Continuous Integration) : 지속적인 통합
- CD (Continuous Delivery) : 지속적인 배포
빌드, 테스트, 배포 프로세스를 자동화하여 소프트웨어 품질과 개발 생산성을 높일 수 있다.
- 편리한 설정
- 웹 기반의 콘솔로 다양한 인증 기반과 결합이 가능하며 권한 관리 기능을 통해 안전한 빌드/배포 환경 구축 가능
- 자동화로 반복되는 작업 감소
- 안정적인 빌드/배포 환경
- 소스버전 관리 툴(git)과 연동하여 코드변경을 감지하고, 자동화 테스트를 포함한 빌드 수행으로 소프트웨어 품질 향상
- 자동화 테스트 : 코딩 표준 준수여부 체크, 유닛 테스트, 통합 테스트
- 테스트 결과에 대한 피드백을 받아 잠재적 오류 사전예방 가능
- 다양한 활용 및 손쉬운 확장
- Jenkins는 많이 사용되고 있는 오픈소스 소프트웨어이기 때문에, 문서화가 잘 되어있음.
- 다양한 적용사례 참고 가능
- 플러그인 직접 개발하여 기능확장 가능
Webhook
웹페이지 또는 웹앱에서 발생하는 특정 행동(이벤트)들을 커스텀 Callback으로 변환해주는 방법
일반적인 API(Polling)
는 클라이언트가 서버를 호출하는 방식이다. 클라이언트가 새로운 데이터를 얻기 위해서 API 엔드포인트를 지속적으로 호출하는 방식이며, 매우 낭비가 심하다.
반면 Webhook
은, 서버에서 데이터 변경과 같은 작업 (이벤트)이 수행 될 때 해당 정보를 HTTP POST 방식으로 알리는 개념이다. 웹 어플리케이션을 사용하는 클라이언트가 직접 URL을 지정하게 되면 역방향 API
처럼 서버에서 해당 URL에 대해 POST 방식으로 콜백을 하게된다.
📌 callback URL : 서버측에서 이벤트가 발생했을 때 클라이언트의 어느 URL로 데이터를 보낼지 정해놓은 주소
이처럼 클라이언트의 입장에서는 자신이 원하는 데이터를 얻기 위해 반복적으로 불필요한 HTTP 요청을 생성할 필요가 없고, 서버 입장에서는 불필요한 HTTP 요청이 감소하기 때문에 서버에 부담을 줄여주는 장점이 있다.
당연하게도 서버에서 이벤트를 인식하고 데이터를 넘겨주기에, 사용하려는 API가 webhook기능을 제공해야 사용할 수 있다. Github와 Gitlab에서는 레포지토리에 대한 Webhook 기능을 제공하고 있으므로, Jenkins에서는 webhook을 사용하여 코드의 변경사항을 감지하고 빌드를 진행하게 된다.
Docker로 Jenkins 설치하기
👉 도커가 설치되어있는 환경에서 진행되었음
젠킨스 설치
-
젠킨스 설치
command 창에 아래의 명령어를 입력한다.
1 2 3 4 5
docker run -d -p 9090:8080 -p 50000:50000 -v /var/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -u root jenkins/jenkins:lts-jdk11
위 명령어를 입력하면, jenkins이미지와 컨테이너가 생성된다.
처음에 이미지를 찾을 수 없다 떴다가 아래로 이렇게 뜨면서 설치가 진행된다.
-
admin 비밀번호 입력
위 명령어는 포트9090으로 설정되어 있으므로,
localhost:9090
으로 접속하여 젠킨스를 연다.jenkins를 설치할 때 생기는 로그에 적혀있던 admin 비밀번호를 입력해준다.
아래 명령어를 치면 로그확인이 가능하다.
1
docker logs jenkins
-
기본 플러그인 설치
추천된 기본 플러그인을 설치해준다. 시간 좀 걸림.
-
관리자 계정 생성
생성 안하고 밑에 admin으로 시작하는 버튼 눌러도 된다.
젠킨스 플러그인 설치
DashBoard > Manager Jenkins > Plugin Manager
또는젠킨스주소/pluginManager
로 이동하여 설치
우리는 gitlab으로 코드를 관리하고, docker로 패키징 할꺼니까 이 두개에 필요한 아래의 플러그인들을 설치해준다.
특정 브랜치만 변동사항 인식하도록 설정하기
젠킨스는 특정 브랜치에서 변동사항이 일어나면 젠킨스에 알려주도록 설정할 수 있다.
전체 브랜치의 업데이트를 관리하지 않아도 된다 !
이제 Job을 등록하고 빌드를 진행하면 된다.