--[Jenkins] Jenkins와 Github로 CI 구성하기(Blue Ocean)

박솔찬·2021년 9월 26일
0

CI/ CD

목록 보기
1/1
post-thumbnail

jenkins와 github를 통해 CI를 구성해보자.

jenkins의 Blue Ocean 플러그인을 사용하여, Multibranch pipeline을 생성하게 된다.

다음에는 Pipeline을 생성하여 진행해볼 것이다.

난 push만 할게, jenkins랑 github 너희가 다 처리하고 보고해 🙌

시나리오는 다음과 같다.

  • git push or pr
  • git webhooks로 jenkins에서 커밋 감지
  • jenkins에서 파이프라인 작동 / 전처리 + 빌드(테스트)

즉, 사용자는 push만 하면 jenkins에서 빌드를 자동으로 진행하고 이에대한 결과를 github commit 부분에 체크표시와 슬랙 알림으로 제공.
(슬랙 알림 제공은 다음에 해볼녀석)

환경

GCP
Github( +webhooks)
Spring Boot(Java11, Gradle)
Jenkins( +Blue Ocean), Docker

jenkins 설치

가장 먼저, 클라우드에 jenkins를 설치해야 한다.
jenkins를 로컬로 설치하면 openjdk의 한계로 인해 플러그인 설치가 안된다.
따라서, docker로 실행한다.

도커 설치

docker로 jenkins를 실행하기 위해 우선 도커를 설치한다.

sudo apt-get update
sudo apt-get install docker.io

docker -v

도커 버전을 확인하면 된다.

jenkins 실행

이제 jenkins 이미지를 받아와서 실행해야 한다.

우선, 이미지를 받아온다.
lts버전을 받아서 사용한다. (latest X)

sudo docker pull jenkins/jenkins:lts

sudo docker images

이미지가 확인되면 성공이다.

이제, jenkins이미지를 실행해야 한다.

docker run -d -p 8080:8080 -v /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts

위에서 중요한 부분은 -v 옵션이다.
1. -v /home/jenkins:/var/jenkins_home
jenkins 컨테이너의 설정을 호스트 서버와 공유함으로써, 컨테이너가 삭제되는 경우에도 설정을 유지할 수 있게 한다.
2. -v /var/run/docker.sock:/var/run/docker.sock
jenkins 컨테이너에서도 호스트 서버의 docker를 사용하기 위한 바인딩이다.
이렇게 컨테이너 내부에서 설치없이, 외부의 도커를 사용하는 방식을 DooD(Dock out of Docker)라고 한다.

다음으로, jenkins에 접속하자.

  1. 본인의 클라우드 주소:8080으로 접속(8080 포트 방화벽 규칙 생성후)
  2. 위 사진 속 Administrator password는 다음을 통해 알 수 있다.
    docker logs {containerId or Name}
    위 명령어를 수행하면 다음과 같이 로그에 키를 확인할 수 있다.
    아래 키를 입력하고 Continue를 눌러 진행한다.
  3. 1번을 클릭하면 여러 필요한 것들이 설치가 진행된다.
    차분히 기다리자.
  4. 설치가 끝나면 다음과 같은 화면으로 넘어가는데, 이 부분도 작성하고 넘어가면 된다.
    최종적으로 다음 화면으로 넘어왔으면 성공이다.

pipeline 생성

이제 깃허브에서 프로젝트를 받아와 빌드까지 수행하는 파이프라인을 생성해야 한다.

FreeStyle과 Pipeline 두 방식이 자주 쓰이는 방식이다.

Pipeline이 FreeStyle보다 Step단계로 확인하기 좋아 Pipeline으로 진행하였다.

Pipeline을 보다 쉽게 구성하도록 도와주는 Blue Ocean플러그인을 사용할 것이다.

Blue Ocean 플러그인 설치

참고로 이 단계 진행 전, Github에 프로젝트가 올라간 레포지토리가 존재하여아 한다.

아래의 사진처럼 플러그인 관리로 들어간다.

설치 가능 카테고리를 선택 후, Blue Ocean을 검색하여 체크를 하고 Install without restart를 눌러 설치를 진행한다.

설치가 완료되면 메인화면의 Dashboard에 기존과는 다르게 블루 오션 열기라는 카테고리가 생성되었다.

블루 오션 열기를 클릭하면 다음과 같은 화면으로 이동한다.
이제 새로운 파이프라인 생성을 눌러 파이프라인 생성을 진행한다.


코드 저장소를 선택하고, 깃허브의 access token을 발급받아 넣어준다.

Connect가 성공하면, 레포지토리 조직과 레포지토리를 선택하는 부분이 나온다.
선택을 완료하면 파이프라인 생성을 눌러 최종적으로 생성을 마무리한다.

Github Project에 jenkinsfile이 없으면, jenkins파일을 시각적으로 쉽게 작성하는 화면으로 넘어온다.

아래처럼 step을 통해 수행을 할 수 있다.
사진은 정말 간단하게 build에 대한 script수행만 하는 것이며,
나는 docker로 pg와 redis를 띄우는 작업을 선작업으로 진행하고 build를 진행하는 방식으로 해보았다.
이는 얼마든지 넣고 빼고 가능하다.

위에서 저장을 진행하면, jenkinsfile을 만들어 레포지토리에 커밋을 한다. 이후, 레포지토리를 받아와 위에서 작성한 jenkinsfile의 순서대로 수행한다.

jenkins 컨테이너 안에 docker 설치

만약, docker 이미지를 실행하는 script가 있는 경우, 아래 처럼 오류가 발생할 것이다.
왜? 이는 jenkins 컨테이너 내에서 docker를 실행하기 위해선 추가로 jenkins 컨테이너 안에 docker를 설치해야 한다.

// jenkins 컨테이너 접속
docker exec -it {containerId or Name} /bin/bash

// docker 설치
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh

이제 사진 속 오른쪽의 재시도 버튼을 클릭하여 다시 진행해보면, 성공 체크를 확인할 수 있다.

깃허브의 레포지토리를 보면 성공했음을 나타내는 녹색 체크표시도 확인할 수 있다.

참고로 아래 사진처럼, 환경변수를 이렇게 등록하고, scrpit에서는 $POSTGRES_DB 이렇게 사용할 수 있다.

Github Webhoos 연결

지금까지 github에서 소스코드를 받아와 빌드까지 진행하는 과정을 자동화하였다.
이제는 소스코드를 push하기만 하면 위 과정으 자동으로 진행되도록 설정할 것이다.

gighub의 Webhooks를 사용할 것이다.
참고

pipeline branch 설정

Blue Ocean이 아닌 Jenkins 메인화면에서 생성한 Pipeline project 설정으로 들어간다.

이후, Branch Sources 부분의 Add를 눌러 Filter by name(with regular expression)을 추가해준다.

이후 추가된 항목에 자동빌드를 원하는 브랜치 명을 작성한다.!

이렇게 jenkins에서의 설정은 끝이다.

github webhooks 설정

github에서 jenkins서버와 webhooks를 연결하면 된다.

다음의 설정으로 들어가서 Add webhook을 누른다.

아래 사진처럼 URL을 입력하고, Content-type은 application/json으로 변경한다.
{} 이 부분은 각자 해당되는 거 넣기
url 마지막에 / 없으면 오류난다!

Add webhook을 누른후, 한 번 새로고침 했을 때 녹색 체크가 표시되면 성공이다.

최종 테스트

이제 모든 설정 및 작업이 끝났다.

따라서 설정한 브랜치로 커밋 이벤트가 발생하면 jenkins에서 빌드가 진행되어야 한다.

커밋을 하고!

jenkins에서 빌드 진행 확인!

jenkins에서 빌드 성공 확인!

github 레포지토리에서도 녹색 체크 확인!

이렇게 Jenkins와 github를 사용하여 CI 구성하는 방법을 알아보았다.


pipeline 으로 구성한 잡의 경우 별도의 설정 없이 /github-webhook 으로 요청이 들오면 파이프라인이 시작
jenkins github webhoos branch 설정
도커 run 환경변수 주입 방법
실제 CI/CD 구성 예시

profile
Why? How? What?

0개의 댓글