1. 개요
이 예제에서는 Jenkins 에서 이메일 알림을 보내는 두 가지 다른 방법을 볼 것 입니다. 파이프라인의 문제에 대해 즉시 알림을 받고 싶을 때 매우 유용할 수 있습니다.
2. 환경 설정
먼저 환경을 설정하겠습니다. Docker Compose 를 사용 하면 상당히 간단하게 수행할 수 있기 때문에 사용해 보겠습니다 .
이 사용방법(예제)에서는 Jenkins Docker 이미지 를 실행하는 컨테이너가 필요합니다 . 또한 MailHog 를 사용하여 이메일 전송 기능을 테스트합니다.
2.1. Docker 작성
환경을 설명하는 docker-compose.yaml 파일을 만들어 보겠습니다 .
version: '3.7'
services:
mailhog:
image: mailhog/mailhog:v1.0.1
container_name: mailhog
networks:
- jenkins
ports:
- 1025:1025
- 8025:8025
jenkins:
image: jenkins/jenkins:2.361.1-lts-jdk11
container_name: jenkins
networks:
- jenkins
ports:
- 8080:8080
- 50000:50000
networks:
jenkins:
여기서 우리가 알아야 할 몇 가지 중요한 세부 사항이 있습니다. 먼저 네트워크 구성 을 살펴보겠습니다 . 두 컨테이너 모두 동일한 네트워크를 사용합니다. 그렇지 않으면 서로 통신할 수 없기 때문에 중요합니다.
두 번째로 이러한 컨테이너의 포트를 살펴보겠습니다. MailHog는 SMTP 서버에 포트 1025 를 사용합니다. 따라서 Jenkins의 이 포트를 사용하여 이메일을 보내야 합니다. 다른 포트는 브라우저에서 사용자 인터페이스에 액세스하는 데 사용할 수 있습니다. Jenkins는 포트 8080 에서 사용자 인터페이스를 제공합니다 .
2.2. 컨테이너 실행
Docker 컨테이너를 시작하겠습니다.
$ docker-compose up -d
이제 위에서 설명한 포트에서 액세스할 수 있습니다. MailHog로 시작하여 브라우저에서 http://localhost:8025/ 를 엽니다. 다음 인터페이스가 표시되어야 합니다.
Jenkins에서 이메일을 보내면 이메일이 List에 표시됩니다.
이제 http://localhost:8080/ 에 접속하여 Jenkins UI도 열어보자.
2.3. 젠킨스 설정
Jenkins 컨테이너는 시작하는 데 시간이 걸리고 UI에 로딩 표시기가 표시됩니다. 그런 다음 생성된 관리자 비밀번호를 입력하는 비밀번호 프롬프트가 표시됩니다.
다음 화면 에서 제안된 모든 플러그인을 설치하고 완료될 때까지 기다려야 합니다. 그런 다음 새 사용자를 만들 수 있지만 반드시 필요한 것은 아닙니다. 건너뛰고 관리자 권한으로 계속 진행해 보겠습니다. 마찬가지로 인스턴스 구성 페이지에서 저장 및 완료를 클릭하면 됩니다. 이제 필요한 모든 기능을 사용할 수 있습니다.
3. 내장 솔루션
Jenkins는 이메일을 보내기 위한 기본 제공 솔루션을 제공합니다 . 시스템 구성 옵션 아래의 Jenkins 관리 메뉴에서 이를 구성 할 수 있습니다 .
페이지 하단으로 스크롤하여 이메일 알림 섹션을 살펴보겠습니다.
여기에서 SMTP 세부 정보를 구성해야 합니다. 이것은 MailHog 컨테이너의 주소와 포트여야 합니다. 두 컨테이너가 서로 액세스할 수 있기 때문에 SMTP 서버는 단순히 "mailHog"일 수 있습니다. 포트는 고급 설정 섹션에서 구성할 수 있으며 이 사용방법(예제)에서는 1025 로 설정해야 합니다 .
확인란을 선택하고 이메일 주소를 제공한 후 이 구성을 테스트할 수도 있습니다. 구성을 적용하고 테스트 이메일을 보내 보겠습니다. MailHog UI에서 이를 확인할 수 있으며 List에 새 이메일이 나타납니다.
3.1. 작업에서의 사용
설정에서 테스트 이메일을 보낼 수 있지만 실제 시나리오에서는 관련 이벤트에 대한 이메일을 받고 싶습니다. 예를 들어 빌드가 실패할 때 알림을 받고 싶을 수 있습니다. 메시지만 인쇄하는 간단한 작업을 만들어 보겠습니다.
먼저 왼쪽 메뉴에서 새 항목 을 선택하고 "Email Test Job"이라는 이름 으로 Freestyle 프로젝트 를 만듭니다.
이 작업을 생성하면 구성 화면으로 리디렉션됩니다. Build Steps 까지 아래로 스크롤 하고 Execute 셸 단계 를 추가해 보겠습니다 . 여기에 간단한 스크립트를 추가해 보겠습니다.
echo "Test job for sending emails."
이 섹션에서 작업 후에 실행될 몇 가지 작업을 추가할 수 있습니다. 이메일 알림 빌드 후 작업을 생성합니다 . 이메일 주소를 수신자로 설정하고 작업 구성을 저장해 보겠습니다.
구성을 저장한 다음 지금 빌드 를 클릭 하여 이 작업을 실행하고 결과를 확인하겠습니다. 콘솔 출력에 메시지가 표시되지만 MailHog를 통해 이메일을 받지 못했습니다. 이 경우 예상되는 동작입니다.
이 이메일 알림은 특정 이벤트에 대해서만 트리거됩니다. 빌드가 실패하거나 불안정해지거나 안정 상태로 돌아오면 이메일이 전송됩니다. 즉, 이러한 이벤트 중 하나가 발생하는 상황을 만들어야 합니다. 예를 들어, 실행된 셸 스크립트를 수정하여 실패한 빌드를 만들 수 있습니다. 이 스크립트에서 0이 아닌 종료 코드로 종료합시다. 이로 인해 Jenkins는 이를 실패한 빌드로 취급합니다.
echo "Test job for sending emails."
exit 1
작업을 다시 실행하고 결과를 확인하겠습니다. 이 실행은 Jenkins에서 실패한 것으로 표시되며 MailHog에서도 이메일을 받았습니다. 이메일 제목은 "Jenkins에서 빌드 실패: 이메일 테스트 작업 #2"입니다. 우리는 신체의 세부 사항을 볼 수 있습니다.
스크립트에서 exit 명령을 제거하고 작업을 다시 실행해 보겠습니다 . 이번에는 빌드 상태가 성공했으며 이메일을 다시 받았습니다. 주제는 "Jenkins 빌드가 정상으로 돌아왔습니다: 이메일 테스트 작업 #3"입니다. 그러나 때로는 더 많은 이벤트에 대해 알림을 받아야 하며 이메일 확장 플러그인이 도움이 될 수 있습니다.
4. 이메일 확장 플러그인
이메일 확장 플러그인을 사용하여 Jenkins에서 이메일을 보낼 수도 있습니다. 가장 중요한 것은 기본 제공 솔루션보다 더 많은 이벤트를 지원한다는 것입니다.
시스템 구성 메뉴를 열어 보겠습니다 . Extended E-mail Notification 이라는 섹션이 표시되어야 합니다 .
이전 예에서 사용한 것과 동일한 SMTP 구성 값을 사용하겠습니다. SMTP 서버는 포트 가 1025 인 "mailhog"여야 합니다 . 우리는 이것을 원하는 대로 추가로 사용자 정의할 수 있지만 이 예에서는 이것으로 충분합니다. 유감스럽게도 이 플러그인의 구성을 테스트할 수 없습니다. 이전에 사용한 작업에서 시도해 보겠습니다.
4.1. 작업에서의 사용
이전에 사용한 "이메일 테스트 작업"의 구성을 변경합니다. 이전 빌드 후 작업을 제거하고 Editable Email Notification 이라는 새 작업을 추가해 보겠습니다 .
먼저 프로젝트 수신자 List 필드에 이메일 주소를 입력합니다. 이 주소로 알림이 전송됩니다. 기본적으로 이 플러그인은 빌드가 실패할 때만 이메일을 보냅니다. 지원하는 모든 이벤트를 보려면 변경해야 합니다. 고급 설정을 열고 트리거 까지 아래로 스크롤해 보겠습니다 . 빌드가 실패할 때마다 개발자에게 이메일을 보내는 트리거를 이미 볼 수 있습니다.
이것을 삭제하고 Always 유형의 트리거로 교체하겠습니다 . 여기에서도 다른 많은 유형의 트리거를 찾을 수 있습니다. 다른 구성 옵션도 많이 있습니다. 예를 들어 알림을 받는 사람, 이메일의 제목과 내용을 설정하거나 첨부 파일을 추가할 수도 있습니다. 그러나 이 예의 기본 설정을 유지하고 작업을 저장할 수 있습니다.
실행하고 MailHog의 받은 편지함을 살펴보겠습니다. 성공적인 빌드에 대한 이메일을 받았습니다. 작업의 셸 스크립트를 다시 변경하고 오류 코드와 함께 종료해 보겠습니다.
echo "Test job for sending emails."
exit 1
작업을 다시 실행하면 실패에 대한 이메일 알림을 받습니다. 스크립트에서 exit 명령을 제거하고 한 번 더 테스트해 보겠습니다. 결과적으로 빌드가 수정되었다는 이메일을 받습니다.
5. 결론
이 기사에서는 Jenkins에서 이메일 알림을 보내는 두 가지 다른 접근 방식을 보았습니다. 먼저 빌드가 실패하거나 다시 안정화되면 이메일을 보낼 수 있는 내장 솔루션을 사용했습니다. 두 번째로 알림을 트리거하는 이벤트를 더 많이 제어해야 할 때 사용할 수 있는 이메일 확장 플러그인을 사용했습니다.