EC2 서버에서 젠킨스 세팅과 웹훅 설정하기

EC2 서버에서 Jenkins 세팅과 웹훅 설정하기

Jenkins 란

젠킨스는 오픈소스 자동화 서버로, 주로 소프트웨어 개발 프로젝트에서 지속적 통합( CI :: Continuous Integration ), 지속적인 배포( CD :: Continuous Delivery ) 를 관리하기 위해 사용합니다.


CI

Continous Integration 은 지속적인 통합이라는 의미를 가지고 있습니다.

  1. 개발자 들은 작은 단위로 자주 코드를 커밋하고, 버전 관리 시스템 (git) 에 병합합니다.
  2. 코드가 커밋될 때마다 CI 서버(Jenkins) 가 자동으로 빌드를 실행합니다.
  3. 빌드 후 자동으로 유닛테스트, 통합테스트, 정적 분석 등이 실행되어 코드의 품질을 확인합니다.

위 과정을 통해 자주 병합을 진행하더라도 충돌없이 코드를 작성할 수 있게 되고, 문제를 조기에 발견해 수정할 수 있습니다.


CD (Continous Delivery)

Continous Delivery 는 CI 다음 단계로 지속적인 전달이라는 의미를 가지고 있습니다.

  • CI 단계가 끝난 후, 코드가 자동으로 stage 환경에 배포됩니다.
    • 지속적인 전달에서는 실서버 배포는 수동으로 승인된 후 진행됩니다.

위처럼 Continous Delivery 는 항상 배포 가능한 상태로 유지되도록 하는 프로세스입니다.


CD (Continous Deploy)

Continous Deploy 는 지속적인 배포는 지속적인 전달에서 더 나아가, 실서버 환경까지 자동으로 배포하는 것을 의미합니다.




젠킨스 설치하기

먼저 이번 프로젝트에서 사용한 젠킨스 방식은 단일 젠킨스 방식으로 하나의 jenkins 만 사용하여 진행했지만 기본으로는 Jenkins 마스터-에이전트 아키텍처 를 사용하니 참고 부탁드립니다.

services:
  jenkins-master:
    image: jenkins/jenkins:lts
    container_name: jenkins-master
    ports:
      - "8081:8080"  # 호스트의 8080 포트를 컨테이너의 8080 포트로 매핑
      - "50000:50000"  # 호스트의 50000 포트를 컨테이너의 50000 포트로 매핑
    volumes:
      - ./jenkins/data:/var/jenkins_home  # 젠킨스 데이터를 영구적으로 저장
    environment:
      - JENKINS_URL=http://<host_url>:8081/
      - TZ=Asia/Seoul  # timezone 설정
  

위는 docker-compose.yml 에 작성한 코드이며 ** 부분에 사용하는 퍼블릭 ip 를 넣어주고**, `docker-compose up -d` 명령어를 통해 실행시켜줍니다.

Port:

  • 8081:8080:
    • 8080으로 현재 서버가 실행되고 있기때문에 8081 포트로 변경을 하였으며, 컨테이너의 8080 포트를 사용하겠다는 의미입니다.
    • 웹인터페이스 접근용 포트입니다.
  • 50000:50000:
    • 에이전트 통신용으로 사용되며, 이 포트는 에이전트와의 통신을 위하여 기본적으로 활성화가 되어 있습니다.
    • 단일 젠킨스로 생략이 가능하나, 기본 설정이 8080, 50000 포트를 열어두는 것이라, 똑같이 설정해두었습니다.


위에서 잘 실행이 되었는지 다음 명령어로 확인해볼 수 있습니다.

docker ps

image


image

그 다음으로는 젠킨스에 접근하기 위해서 자신의 ip:8081 로 접근하면 위와 같은 화면이 나오는데 위의 해당하는 password 는 docker-compose log 에 가면 볼 수 있습니다.


다음 명령어를 통해 log 를 확인해봅니다.

docker logs jenkins-master

그럼 위와 같이 7d4010~ 처럼 얻을 수 있는데 저 부분을 복사해 위 Administrator password 에 붙혀넣어줍니다.


image

그럼 위 같은 페이지가 나오는데 여기서 Install suggested plugins (권장 플러그인 설치) 를 눌러줍니다.


image

그 다음 정보를 입력하고 Save and Continue 를 눌러 진행해줍니다.

이제 젠킨스 설치는 완료되었습니다.




Jenkins Job 생성하기

Jenkins Job 은 Git 의 repository 를 pull 받고 테스트 하는 등 역할을 부여합니다.

먼저 새로운 Item 을 눌러줍니다.


그러면 위 화면같이 나올텐데 구분할 수 있는 식별 이름과, Pipeliine 을 선택해줍니다.

요즘은 Freestyle project 로 많이 진행하는 추세입니다만 pipeline 은 작성해둔 스크립트만 붙혀넣으면 더 간단하므로 pipeline 을 선택하였습니다.


그러면 다음 페이지가 나오는데 GitHub project 에 github 프로젝트 url 을 붙혀넣어줍니다.


그다음 밑에 있는 Build Triggers 에는 GitHub hook trigger for GITScm polling 을 클릭하여 줍니다.

이부분은 github 에서 webhook 을 통해서 trigger 하면 자동으로 빌드가 되도록 할 수 있습니다.


pipeline {
  agent any
  
  stages {
    stage('connect') {
      steps {
        git branch: 'master',
        url: 'https://github.com/swyp-lucky7/echo-eco.git'
      }
    }
  }
}

위 작업으로 git 과 연결하였습니다.

url 은 위 그림을 참고하시면 됩니다.

git branch 에서 master 를 브랜치를 지정했기때문에 master 브랜치가 수정이 되면 트리거가 일어나게 됩니다.

url 에 .git 으로 git repository 와 연결이 되어야 웹훅이 정상적으로 일어납니다.

이후 저장을 눌러줍니다.


이후 빌드를 눌러줍니다.


그러면 다음과 같이 정상적으로 된 것을 볼수 있습니다.




Github 와 Jenkins 웹 훅 연결하기

먼저 앞서서 우리는 item 을 생성할 때 GitHub hook trigger for GITScm polling 를 체크했기 때문에 해당 item 에서는 웹 훅을 받을 준비가 되었습니다.

프로젝트에서 Settings > Webhooks > Add webhook 을 클릭해줍니다.


  • Payload URL
    • aws ec2 의 탄력적 ip:포트/github-webhook/
  • Content type
    • application/json

그리고 Add webhook 버튼을 눌러 저장해줍니다.


이후 webhook 에서 ping 을 날린 뒤 200 응답을 받으면 다음과 같이 초록색 체크 표시가 뜨게 됩니다.


다음 시리즈에서는 웹훅까지 다 되었으니 빌드하고 배포까지 알아보겠습니다.




프로젝트 세팅하기 시리즈

프로젝트 세팅하기




참고

https://junhyunny.github.io/information/jenkins/github/jenkins-github-webhook/

Leave a comment