ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [배포자동화구축] 2-2. Github Repository와 배포서버, 운영서버를 연동하기
    Project 2023. 11. 15. 10:18

     

     

    이전시간에는 배포서버에 젠킨스를 설치하여 기본설정을 완료했다.

     

     

    우린 배포서버와 운영서버가 분리되어있는 구성이기 때문에 깃헙레포 <-> 배포서버와 배포서버 <-> 운영서버 간의 연동이 필요하다. 

     

    따라서 이번에는 각 서버들을 연동하고 젠킨스에 빌드를 자동으로 실행해줄 pipeline을 구성해볼 것이다. 

     

     

     

    1. Github 레포에서 배포서버 연동하기 

     

    1-1 github Repository 설정에서 Webhooks 추가하기

     

     

    레파지토리 설정에 있는 Webhooks 메뉴로 들어가 신규 webhook을 추가한다.  

    Webhooks는 특정 이벤트가 발생할 경우 지정한 url로 레파지토리의 정보, 브랜치 정보 등을 POST로 보내는 역할을 담당한다. 우리는 push 이벤트가 발생 할 경우 jenkins 서버로 요청을 보내도록 설정할 것이다.

     

     

     

    url에 젠킨스를 설치한 aws ec2의 public ip주소를 입력한다. 

    이전 단계에서 배포서버의 인바운드 설정에서 포트를 9090으로 열어줬기 때문에 url에 포트번호까지 포함하여 작성한다.

     

    현재 설정에는 푸시 이벤트를 감지할 특정 브랜치를 지정할 수가 없다.

    Webhook은 해당 레파지토리 자체(모든 브랜치)에 푸시 이벤트가 발생하면 페이로드를 보내기 때문에 추후 젠킨스에 구성할 pipeline에 특정 브랜치를 명시해 줄 것이다.

    또한, 지금 단계에서 젠킨스에 Webhook을 보내면 젠킨스에 있는 트리거가 체크된 job들 모두가 해당 웹훅을 수신하게 된다. 

     

     

    하지만 원하는 것은 현재 프로젝트와 관련된 배포 job만 실행되도록, 특정 브랜치에서만 푸시이벤트가 일어날때 빌드가 트리거 되도록 설정하고 싶은것이기 때문에 일반적인 웹훅을 사용하지 않고 Generic Webhook Trigger이라는 플러그인을 설치하여 사용할 것이다.

     

     

     

    1-2 젠킨스에서 플러그인 설치

     

     

     

    플러그인 설치를 위해 젠킨스 관리 - 플러그인 메뉴에 있는 Avalible plugins에서 검색 후 다운로드 받는다. 

     

     

    Generic Webhook Trigger와 추후에 설정할 Publish Over SSH 플러그인까지 설치한다. 

     

     

    설치를 완료하고 다시 깃헙 레포의 Webhook 설정으로 돌아가 url을 입력해보자. 

    Generic Webhook Trigger의 기본 url 포맷은 http://젠킨스url(aws ec2 퍼블릭 ip주소:서버 포트번호)/generic-webhook-trigger/invoke이다.

     

     

    하지만 여기에 invoke될 job을 token값으로 명시하면 해당되는 job만 트리거되도록 설정할 수 있다. 

     

    따라서 최종적으로 입력한 url은 http://AWS EC2 public ip:port number/generic-webhook-trigger/invoke?token=pipeline 으로, 추후 젠킨스에서 job(파이프라인)을 구성할때 token 값을 pipeline이라고 명시해줘야한다.

    pipeline이라는 토큰값은 내가 임의로 지정한거고 자유롭게 작성하면 된다.

     

     

    추후 구성될 job이 pipeline 타입이기 때문에 반드시 Content-type을 json으로 설정해야 페이로드 데이터를 받을 수 있다. 그리고 트리거 될 이벤트를 푸시 이벤트로 설정하고, 훅이 트리거 될 때마다 상세 내용을 보내도록 Active 버튼을 활성화하여 웹훅 추가를 마무리한다. 

     

    아직 jenkins job구성을 안했기 때문에 응답 결과는 404로 뜨는 것이 정상이다.

     

     

    2. 배포서버에서 Github 레포 연동하기 

     

    다음으로 배포서버의 인증정보를 Github에 등록하여 배포서버에서도 Github 레포를 접근할 수 있도록 설정해보자. 

    배포서버에서 빌드를 하기 전에 Github 레포에서 최신 코드를 clone해오는 과정이 필요하기 때문에 접근이 가능하도록 인증정보를 추가해줘야한다. 

     

     

     

    2-1 젠킨스 Credentials 설정

     

    ssh 인증을 위해 공개키 방식으로 key를 생성할 것인데 해당 방식에 대한 설명은 현재 포스팅의 관심사와는 별개이므로 검색을 통해 확인하길 바란다. 

     

     

    젠킨스가 설치된 AWS EC2 콘솔에 접속해서 ssh 인증을 위한 키를 만들어보자. 

     

    인스턴스의 홈 경로(/home/ubuntu)로 들어가면 숨김폴더로 .ssh 폴더가 있다. (ls -a로 숨김폴더 확인)

    따라서 /home/ubuntu로 이동해서 아래 명령어를 입력하고 나오는 모든 설정들을 엔터로 패스하면서 ssh 키를 만들어준다.

     

    $ cd .ssh
    ssh-keygen
    ls

     

    만들어진 id_rsa가 프라이빗키, id_rsa.pub가 퍼블릭키다. 프라이빗 키를 젠킨스 크리덴셜에 추가해준다 

     

     

     

    젠킨스 관리 - 크리덴셜 메뉴를 클릭하여 Add credentials를 클릭한다.

    종류를 SSH Username with private key로 변경하고 id 부분에 해당 크리덴셜을 구분할 이름을 작성해준다. 크리덴셜 구분을 id로 하기 때문에 기억하고 있어야 한다. 

     

     

     

     

    Private Key에 있는 Enter directly를 누르고 아까 생성한 .ssh 경로에 있는 private key인 id_rsa파일을 열어 

    -----BEGIN OPENSSH PRIVATE KEY----- 을 포함한 -----END OPENSSH PRIVATE KEY---- 라인까지 전부 복사해서 에디터에 넣고 저장해준다. 

     

     

     

    2-3 Github 레포에 젠킨스 서버의 퍼블릭 키를 등록 

     

     

     

    레파지토리 Setting 탭에 있는 Deploy Keys에 들어가서 새로운 deploy key를 추가한다.

    이전에 생성했던 젠킨스 ssh 퍼블릭키인 id_rsa.pub에 있는 모든 내용을 복사하여 Key에 붙여넣기 하고 저장한다.

     

     

     

    3. 배포서버에서 운영서버 연동하기

     

    다음으로 배포서버와 운영서버를 연동하기 위해 운영서버의 정보를 젠킨스에 등록해주자.

    이전 포스팅에서 AWS EC2 인스턴스를 만드는 과정부터 시작했으니 동일한 과정으로 운영서버를 구축해준다. 인바운드 규칙으로는 22 포트가 열어져 있기만 하면 된다. 

     

     

    1번 과정에서 Publish over SSH 플러그인을 설치해줬다.

    배포서버에 설치된 Jenkins에서 운영서버로 jar파일을 보내고, 해당 jar파일을 실행시키는 스크립트를 실행하는 명령을 SSH 통신으로 진행하기 때문에 SSH server를 구성해줘야한다. 

     

     

     

     

    젠킨스 관리에서 시스템 설정으로 들어가면 맨 아래에 Publish Over SSH 관련 설정들이 있다. 

     

     

    맨 아래 있는 SSH Servers에 해당 내용을 추가한다. 

    jenkins pipeline 구성 시 SSH 서버 구분을 Name으로 하기 때문에 해당 이름을 기억하고 있어야한다.

    그리고 Hostname에는 운영서버의 public ip만 적고(url 아님), 운영서버의 username과 빌드된 jar파일이 있을 운영서버의 경로를 지정해준다. 

     

     

    그리고 아래에 있는 Advanced를 클릭해 아까 배포서버에서 만들었던 private key를 등록해준다. 

     

     

    4. 운영서버에서 배포서버 연동하기

     

    마찬가지로 운영서버에도 배포서버의 public key 정보를 추가해줘야한다. 

     

    운영서버를 콘솔로 접근하여 /home/ubuntu/.ssh 경로를 확인하면 authorize_key 파일이 있는데

    해당 파일을 열어 배포서버의 퍼블릭 키인 id_rsa.pub를 복사하여 기존 key 아래에 추가해준다. 

     

    접근을 허용하기 위해 .ssh 폴더와 suthorize_key에 권한을 수정해준다. 

     

    chmod 700 ~/.ssh
    chmod 644 ~/.ssh/authorized_keys

     

     

     

    마지막으로 아까 젠킨스 시스템설정 - SSH Servers - Advanced 맨 아래에 있었던 Test Configuration을 클릭해서 연동이 정상적으로 되었는지 확인해보자.

     

    실패시 로그가 뜰텐데 public key 오류라면 운영서버에 배포서버 public key를 등록하는 과정을 다시 확인하길 바란다. 

     

     

    다음 포스팅에서는 github에서 보내는 웹훅을 수신할 pipeline job을 구성하고 테스트를 통해 배포 자동화를 마무리 할 것이다. 

     

Designed by Tistory.