개발 업무/LINUX

Jenkins + Github 연동 하기

호크아이나인 2023. 4. 19. 13:50

개인적으로 만든 프로젝트는 대부분 Github을 이용하고 있다. 

이제 Jenkins,에 Github를 연결해 보자.

 

IntelliJ 에서 Github연동하는 방법과 동일하게  먼저 Jenkins용 token을 생성해 줘야 한다. 

 

1. Github에 로그인 후 아래 이미지와 같이 Settings 메뉴를 클릭  

2. 왼쪽메뉴에서 Developer settings를 클릭

3. 최근에 들어가보니, 이전과는 다른 메뉴가 생겼는데, 기존방식과 동일하게 'Tokens(classic)'를 선택하고, 

'Generate new token'  select box를 클릭하고 'Generate new token (classic)'을 선택한다. 

* Generate new token (Beta) 가 새로 생겼던데, 그냥 했던데로 classic을 사용함. 

 

4. 아래와 같이 화살표가 있는 부분을 활성화(체크) 한다. 

5. 이렇게 하면 Jenkins에서 사용할 토큰이 만들어 진다. ( 이 토큰을 Jenkins 설정에서 사용할 것이다.)

 

▶ Jenkins에서 Github을 사용을 위한 환경설정을 한다. 

 

1.  Jenkins 메인화면 왼쪽 메뉴에서  jenkins 관리 ->  System 을 클릭한다. 

2. 모니터 마다 다르겠지만, 중간쯤에 'GitHub Server' 설정이 있다. 

Name 은 원하는 명칭을 입력

API URL 적는 곳에 'https://api.github.com'을 입력

Credentals는 'Add' select box를 클릭하고...

3. Kind 는 'Secret text' 선택 

4. Secret 입력란에 Github에서 생성한 token 을 입력 한다. 

5. ID는 개인이 알아서 원하는 명칭을 작성하면 된다.

6. 'Test connction' 버튼을 클릭해서 GitHub와의 연결을 확인 한다.

Github에 등록된 프로젝트를 Jenkins에 설정해 보자. (* Jenkins 에서 빌드 및 배포를 위한 설정이다.)

 

1. 새로운 item을 클릭 

2. item name을 입력하고, Freestyle project 를 클릭 

 

3. 좌측에 보면 6개의 메뉴로 구성되어 있는데, 이 부분이 GitHub에 있는 프로젝트의 빌드와 배포에 관련된 

순차적인 설정으로 보면 된다. 

3-1. 먼제 General에서 설명항목과 Github에 대한 설정을 입력한다. 

Project url은 Github의 repository의 URL 경로를 적어 주면 된다. 

3.2. 다음은 '소스코드관리' 이 부분부터는 개발 상황에 따라 달라진다.

우선은 가장 기본적인 형태로 셋팅 한다.  (*입력항목은 아래 이미지와 같이 하면 됨)

3.3. Build Stepsr - 인텔리제이나, 이클립스에서 jar, war 파일을 생성하는 것과 동일하다. 

여기서는 IntelliJ에서 Spring Boot Project 의 gradle과 war파일 생성 설정을 적용한다. 

*관련 설정은 jenkins가 설치된 서버에

/var/lib/jenkins/workspace/[project name]/build/libs/[jar or war file name]  파일이 생성된다. 

 

3.4. Excute shell 작성 

spring boot로 생성된 MAS(jar 파일) 를 실행 shell을 작성해야 한다. 

우선 확인해야 하는 부분은 jenkins 의 권한.

# sudo visudo

jenkins ALL=(ALL) NOPASSWD: ALL 을 넣어 준다

 

start_eureka.sh 는 ssh로 접속해서 실행할 상황도 있어서 만든 shell이다. 

참고로 shell의 내용은 ->  

PROC=`ps aux | grep eureka`
if [[ $PROC == *"eureka"* ]]; then
  echo "Process is running."
  sudo kill -15 `ps -ef | grep eureka | grep -v grep | awk '{print $2}'`
else
  echo "Process is not running."
fi
sudo nohup java -jar -Dspring.profiles.active=prod /home/temeet/was/eureka-service-0.0.1-SNAPSHOT.jar 1> /dev/null 2>&1 &