티스토리 뷰

반응형

이번 글에서는 젠킨스에서 Slack 웹훅으로 연결하여 배포한 내용을 보내는 방법에 대해 기술해보려 합니다. 

가장 먼저 필요한 준비물은 아래와 같습니다. 

  • Jenkins 서버 
  • 웹훅을 추가할 수 있는 Slack 워크스페이스 및 계정

 

1. Slack 수신 웹후크 설정에 접속

아래의 페이지가 나올 때 까지 접속합니다. 관리 - 사용자 지정 통합 앱 - 수신 웹후크 로 들어갑니다.

 

Slack 수신 웹훅 설정 페이지

가장 먼저 적용할 부분은 Slack 웹훅을 보낼 수 있는 페이지에 접속하여 보내고자 할 워크스페이스에 연동하는 작업입니다. 전송하고자 하는 채널을 선택하시고, 없는 경우 새 채널 생서응로 해서 채널을 만들어주면 준비는 끝납니다. 

 

Slack 웹훅 아이템 생성 및 연결 전

 

이제 기본적으로 세팅할 부분은 여기에서 따로 없고, 생성된 URL을 미리 클립보드에 붙여넣습니다. 기본적으로 만들어지는 곳에서 매우 친절하게 슬랙 웹훅을 보낼 수 있도록 명령어와 curl 소스 코드도 제공해줍니다. 이 curl 명령어를 이따가 테스트할 때 써보도록 하겠습니다.

 

Slack Webhook 생성 직후 내용

 

필요에 따라서 웹훅을 발송하는 봇의 이름과 아이콘도 지정할 수 있습니다. 여기서 incoming-webhook 으로 되어 있는 것만 이름을 변경하고, 원하는 이미지로 업로드하면 기본적인 웹훅 세팅이 끝납니다.

Slack Webhook 커스텀 설정

 

2. Jenkins workspace 에 스크립트 파일을 생성하고 호출이 잘 되는지 테스트하기 

이제 위에서 만들어진 웹훅을 젠킨스 아이템에 연결시킬 차례입니다. 젠킨스에서도 기존에 프로젝트를 빌드하는 아이템이 있다면 그 아이템으로 들어가주시고, 그렇지 않은 경우 새 아이템을 생성합니다. 

그리고 서버로 접속하여 스크립트 파일을 생성하기 이전에, 해당 내용을 실행시키기 위한 커맨드 파일을 하나 작성합니다. 

Build Steps 에서 아래의 드롭박스를 열어보시면 'Execute Shell' 이 있습니다. 이 항목을 클릭해주면 새롭게 Execute Shell 이란 항목이 추가되고, Command 라고 하여 명령어를 입력할 수 있는 란이 추가됩니다. 

Add Build Step 드롭박스를 열면 기본적으로 있는 Execute Shell

 

curl -X POST --data-urlencode "payload={\"channel\": \"#일반\", \"username\": \"webhookbot\", \"text\": \"이 항목은 #개의 일반에 포스트되며 webhookbot이라는 봇에서 제공됩니다.\", \"icon_emoji\": \":ghost:\"}" ${웹훅으로_생성된_URL}

이제 위의 명령어 (아까 웹훅 설정에서 기본적으로 만들어준 curl 명령어)를 빈칸에 입력하고 저장을 누릅니다. 

Execute shell 내부에 Slack 웹훅 연결

 

그리고 실행을 눌러준 뒤 웹훅 메시지가 제대로 날라오는지 확인합니다. 

위에서 설정한 일반 채널로 날라오는 모습

 

 

3. 젠킨스 아이템과 스크립트 파일 연동 

이제 다음으로 진행해야 하는 것은 본격적으로 메시지 포맷을 작성하는 것입니다. 저같은 경우 배포를 앞둔 시점에서 진행하기 전에 다른 팀원들에게 공유를 하는 것이 일상이었기 때문에 메시지 포맷을 이렇게 정했습니다. 

<b>${서버이름} [${프로젝트이름}]</b> 배포 예정입니다. 
${Git 작성자 이메일}
<b>Git 로그 최근 내역 5개</b>
${Git 로그 최근 내역 5개}

위의 코드는 마크다운으로 작성한 것이기 때문에 스크립트 파일에서 작동하는 원리와 매우 다릅니다. 기본적으로 어떻게 포맷을 잡아두고 설정을 하는 편이 수월합니다. 

 

3-1. 변수 내보내기 

젠킨스 아이템에서 스크립트 파일로 전달해주어야 하는 파라미터는 ${서버이름}, ${프로젝트이름} 정도가 있습니다. 이는 shell 에서 쉽게 지원하는 export 키워드를 사용하여 내보내면 됩니다. 

 

3-2. Git 로그 확인 

이제 확인해야 할 내용은 Git 과 관련된 내용입니다. 저희 팀은 형상관리 도구로 대표적으로 많이 사용하는 Git 을 사용하기 때문에 Git에서 담아오는 정보 중 일부를 보여주는 것이 필요하였습니다. 최근 로그가 많이 보여지면 좋지만, 핫픽스나 릴리즈의 경우 버전과 최근 작업 내역정도 보여주는 것이 필요하였기 때문에 5개로 제한을 두고 보여주는 것으로 세팅했습니다. 추가로 원하는 내용이 있으시면 아래에 커맨드를 적어놓을 예정이니 숫자만 변경하여 사용하시면 됩니다.

 

저자와 git log 표시하기

개발팀 내에서는 Git flow 를 사용하여 배포를 진행하고 있습니다. 그래서 누가 작업했는지 작업자의 이름 또는 이메일이 필요하였고, 이를 찍어주기 위한 명령어는 아래처럼 사용할 수 있습니다. 

AUTHOR=$(git show -s --format='%ae')

 

그리고 최근 깃 내역을 확인하는 명령어는 찾아보니 이렇게 쉽게 한줄로 가능하더라구요.

GIT_LOG=$(git log --format=%B -n 5) // 여기 숫자에 따라 로그 갯수를 지정할 수 있습니다.

 

4. Slack curl 코드를 스크립트에 입력하기 

이제 기본적인 파라미터 세팅은 끝났습니다. curl 코드를 입력하여 스크립트 파일을 완성시켜보도록 하겠습니다.

curl -X POST --data-urlencode "payload={\"channel\": \"#teamname\", \"username\": \"jenkins-user\", \"text\": \"*${SERVER_NAME} [${PROJECT_NAME}]* ${VERSION} 배포 예정입니다.\n*Author: ${AUTHOR}* \n\n*최근 커밋 로그(5개)*\n${GIT_LOG} \", \"icon_emoji\": \":ghost:\"}" ${WEBHOOK_URL}

 


 

Fin. 완성된 메시지 결과물

저 같은 경우는 jenkins-user 를 웹훅 봇의 이름으로 지정하였고, 커밋 로그를 5개까지 뿌려줄 수 있도록 지정하였습니다. 이제 앞으로 배포 때마다 일일히 타이핑 치지 않고도 어떤 내용이 어느 서버에 들어가는지 손쉽게 확인할 수 있게 되었습니다 :) 

 

 

반응형
댓글
공지사항