Jenkins

- SUN사에서 개발된 Hudson프로젝트에서 파생된 프로젝트.
- CI(Continuous Integration)/CD(Continuous Delivery)툴(오픈소스 자동화 서버)
- 개발 프로세스를 자동화하여 빌드 > 테스트 > 배포 작업을 자동으로 수행
- 빌드 > 테스트 > 배포 작업 : Pipeline
- 자바로 구현된 프로그램 (JDK11부터 동작)

주요기능
- 지속적인 통합
- 개발자가 소스코드를 repository에 병합할때마다 자동으로 빌드하고 테스트 실행
- 지속적인 배포
- 빌드 > 테스트를 통과한 후 자동으로 다양한 환경에 배포를 수행.
- 파이프라인 지원
- 웹 인터페이스 지원
- 웹 기반 인터페이스를 제공하여 빌드시 로그를 손쉽게 모니터링 할 수 있다.
- Jenkins는 다양한 플러그인을 지원하기 때문에 파이프라인 구성이 복잡해질 수 있고, 버전간의 호환성, 보안사항등을 고려해야 한다.
Master와 Slave 구성
- Master : Controller라고 불리며, Jenkins slave를 관리하고 작업 스케줄링과 모니터링을 수행.
- slave
- agent라고 불리며 파이프라인에 정의된 작업을 수행.
- 다양한 환경에서 작동하며 작업을 분산시켜 부하를 감소시키는 역할.
- 설정파일 : C:\ProgramData\Jenkins\jenkins.xml
- 경로 변경가능


Jenkins와 Github 연결
- Github repository에서 token발급
- Github Repository에 Webhook설정
- Jenkins에 plugin 설치 (Webhook Trigger, GitHub Integration, Github API Plugin)
- Jenkins Credentials 생성
- Jenkins Pipeline 설정
- Jenkinsfile 작성
ngrop
- 외부 접속 불가능한 ip를 domain으로 제공하여 연결 가능하도록 만들어준다.
-
ngrok.io 접속 후 Get ngrok 탭 클릭

-
Windows 클릭 후 ZIP파일 다운로드

-
ngrok config add-authtoken 토큰값 을 cmd 관리자모드 실행 후
ngrok.exe 가 설치된 폴더로 이동 후
ngrok config add-authtoken 키값 입력


-
ngrok.exe실행 후
ngrok http http://localhost:8082 입력 (8080은 Tomcat과 충돌우려)


-
Forwarding에 나온 주소를 인터넷에서 입력 -> http://localhost:8082와 동일한 결과

github token 생성


- 필수 : repo, admin:org, admin:repo_hook
- 나머지 선택 : workflow, notifications, user
repository 생성 후 webhook 설정


-
Payload URL : 외부 접속이 가능한 Jenkins의 URL
-
젠킨스 에서 플러그인 설치

-
Generic Webhook Trigger Plugin
- 웹 훅 이벤트를 감지하여 빌드를 트리거 할 때 사용.
- 커밋 , 풀리퀘스트 등 특정 이벤트가 발생했을 때 빌드 작업 수행.
-
GitHub API Plugin
-
GitHub Branch Source Plugin
-
GitHub Integration Plugin
- 젠킨스와 GitHub에 통합을 지원하는 플러그인
- GitHub에 push 될때마다 자동으로 젠킨스의 빌드를 시작한다.
- CI/CD파이프라인을 실행.

Jenkins Credentials 생성
- global 클릭

- add Credential 클릭


- Username : Github_id
- Password : Webhook이 설정된 token
- ID : 아이디
Jenkins pipeline 설정







일정시간마다 자동 빌드 설정
- configure > 소스코드 관리 > 빌드 유발 > Poll SCM

- Schedule
- Cron 표현식 (*1*2*3*4*5 )
- *1 : 시간 H/5 : 5분 , H : 1시간
- *2 : 일
- *3 : 월
- *4 : 년
- *5 : 요일
- H/5 * * * 1-5 : 5분에 한번씩 월요일에서 금요일까지 진행
Pipeline 구성






jenkinsfile 작성법
pipeline {// 전체 파이프라인 정의
agent any // 어떤 agent에서나 실행될 수 있다.
stages { //여러 Stage를 관리하기 위해서 사용하는 블록
stage('Hello') { // 하나의 작업 stage('식별될 수 있는 이름');
steps { // 하는일
echo 'Hello World'
sh 리눅스 명령어
bat DOS 명령어
}
}
}
}

- git branch : 깃 레퍼지토리 브랜치명
- credentialsId : Jenkins Credentials ID
- url : 깃 레퍼지토리 경로