2013-03-02 4 views
4

매 시간마다 실행하도록 구성된 jenkins 작업이 있습니다. 성공 빌드 메일을 하루에 한 번만 전자 메일로 보내고 싶습니다. Email-Ext는 모든 성공, 실패 등에 대한 이메일을 보낼 수있는 옵션을 제공합니다.하지만 내가 원했던 것은 성공 이메일을 한 번만 보낼 수있는 능력입니다.Jenkins : 하루에 한 번만 성공 이메일을 보냅니다. (작업은 @hourly로 실행됩니다)

+0

매일 특정 시간에 이메일을 보내시겠습니까? 그리고 그 일은 성공했거나 그 일의 상태를 원할 때만 그 우편물을 보내야합니까? –

+0

매일 성공하는 경우에만 특정 시간에 이메일을 보내고 싶었습니다. – Rajesh

+0

@Rajesh 그냥 호기심 - 어떻게 매시간 실행하도록 구성 했습니까? @hourly를 사용 했습니까? – streetlight

답변

2

글쎄, 당신을 위해 할 수있는 플러그인이 없습니다. Jenkins의 기본 이메일 기능은 매우 간단하며 정상적으로 작동합니다. Email-ext plugin이 있지만이 하나가 더 많은 일을 할 수 있습니다. 모든

먼저, 이메일-EXT와 함께, 당신은 전자 우편으로 통지하도록 특정 트리거를 구성 할 수 있습니다 - 그것은 젠킨스의 기본 동작과 유사하다 성공 또는 실패,에있을 수 있습니다. 그런데 과 같이 더 세련된 것이 있습니다. 첫 번째 오류은 여전히 ​​실패합니다.입니다. 이렇게하면 Jenkins가 전자 메일을 보내는 대상 (받는 사람 목록, 커미터 또는 요청자)을 언제 그리고 누구에게 제어 할 수 있는지 알 수 있습니다. 제 경우에는 좋은 설정이 Jenkins에 의해 생성 된 이메일 트래픽에 많은 도움이 될 것입니다. 특정 상황에서 특정 개의 이메일을 특정 사용자 목록에 보낼 수 있습니다. - 훌륭합니다!

다른 옵션은 실제로 제어 수준이 필요하지 않고 전자 메일 트래픽을 하루에 하나의 요약으로 제한하려는 경우 메일 링리스트를 설정하는 것입니다. 대부분의 메일 링리스트 엔진은 일일 다이제스트을 모든 이메일 트래픽 중 목록에 보냅니다. 그것이 실제로는 장기적으로 좋은 선택 인 것처럼 느껴지지는 않지만 충분해야합니다. 나는 확실히 Email-ext 플러그인을 시도 할 것이다.

+0

다이제스트 전자 메일은 좋은 생각이지만 나에게 해결 방법처럼 보입니다. 현재 나는 jenkins에서 2 개의 작업을 구성했습니다. 매시간마다 실행되는 작업과 특정 시간에만 실행되는 작업으로 하나의 성공 이메일 만 전송합니다. – Rajesh

+0

항상 해결 방법이 될 것입니다. 그것을 직시하자 - 그런 특징이 없습니다. 하지만 플러그인을 작성하여 원하는대로 할 수 있습니다. 아직도, 일정한 특징 및 확장 한 전자 우편 플러그 접속 식 특징 외에 당신이 할 수있는 다량이 없다 * out-of-the-box * –

1

이것은 오래된 질문이며 이미 사용자 자신의 해결 방법을 찾았지만 비슷한 필요성이 있으며 어쨌든 내 솔루션을 공유 할 것이라고 생각했습니다. 내가 한 일은 실패한 국가의 일자리에 대한 일일 요약 전자 메일을 생성하는 것이 었습니다. 이는 근본적으로 단일 업무에 대해 하루에 한 번 성공 보고서를 보내는 것과 매우 유사합니다.

내 솔루션은 Email-Ext 플러그인의 사전 보내기 스크립트 기능과 결합 된 Groovy 빌드 단계를 사용합니다. 위의 의견에서 언급 한 Nabble thread에서 아이디어를 얻었습니다. Jenkins 사이트의 Email-Ext Recipes도 참조하십시오.

여기에는 Execute System Groovy Script 아래에 구성된 실패한 빌드를 결정하는 초기 Groovy 스크립트가 있습니다. 당신은 당신의 빌드가 성공 또는 실패 여부를 결정하기 위해 비슷한 뭔가를 할 수 :

// List the names of jobs you want to ignore for this check 
ignore = [ ] 

// Find all failed and unstable jobs 
failed = hudson.model.Hudson.instance.getView("All").items.findAll{ job -> 
    job.getDisplayName() != "Daily Jenkins Job Nag" && 
    !ignore.contains(job.getDisplayName()) && 
    job.isBuildable() && 
    job.lastCompletedBuild && 
    (job.lastCompletedBuild.result == hudson.model.Result.FAILURE || 
    job.lastCompletedBuild.result == hudson.model.Result.UNSTABLE) 
} 

// Log the job names so the build results are legible 
failed.each { job -> 
    println(job.getDisplayName() + 
      " " + job.lastCompletedBuild.result + 
      " at build " + job.lastCompletedBuild.number + 
      " (" + job.lastCompletedBuild.timestamp.format("yyyy-MM-dd'T'HH:mm ZZZZ") + ")"); 
} 

// Return failure if there are any failed jobs 
return failed.size 

그런 다음, 아래로 편집 가능한 이메일 알림 섹션에서, 나는 실패에 알리기 위해 이메일-EXT 플러그인을 설정합니다. 나는 일반 텍스트 (텍스트/일반)컨텐츠 유형을 설정 빈 기본 콘텐츠 왼쪽과 같이 다음을 설정 사전 보내 스크립트을 :

failed = hudson.model.Hudson.instance.getView("All").items.findAll{ job -> 
    job.getDisplayName() != "Daily Jenkins Job Nag" && 
    job.isBuildable() && 
    job.lastCompletedBuild && 
    (job.lastCompletedBuild.result == hudson.model.Result.FAILURE || 
    job.lastCompletedBuild.result == hudson.model.Result.UNSTABLE) 
} 

def output = StringBuilder.newInstance() 

output << "<html>\n" 
output << " <body>\n" 
output << "<p>Jenkins reports the following failed jobs:</p>" 
output << " <ul>\n" 

failed.each { job -> 
    url = hudson.model.Hudson.instance.rootUrl + job.url + "/" + job.lastCompletedBuild.number + "/" 
    output << " <li>" 
    output << "<a href=\"" + url + "\">" + job.displayName + "</a>" 
    output << " " + job.lastCompletedBuild.result 
    output << " at build " + job.lastCompletedBuild.number 
    output << " (" + job.lastCompletedBuild.timestamp.format("yyyy-MM-dd'T'HH:mm ZZZZ") + ")" 
    output << "</li>\n" 
} 

output << " </ul>\n" 
output << " </body>\n" 
output << "</html>" 

msg.setContent(output.toString(), "text/html") 

열쇠는 당신이 가지고 있다는 것입니다 msg 개체에 대한 액세스는 MimeMessage입니다. MIME 메시지의 내용을 원하는대로 설정할 수 있습니다.

이 경우 실패한 작업 목록을 생성하고 있지만, 귀하의 경우 일일 1 회 성공 보고서를 받기를 원하는 메시지가 무엇이든됩니다.필요에 따라 Email-Ext가 실패한 빌드가 아닌 모든 빌드에 대한 결과를 보내도록 할 수 있습니다.

1

이전 이메일 이후 시간이 충분하지 않은 경우 전자 메일을 억제하는 방법은 어떻습니까? 요청 된 것이 정확하지는 않지만, 이와 같은 사전 전송 스크립트는 단순성을 고려할 가치가있을 수 있습니다.

if (build.result != hudson.model.Result.SUCCESS) { 
    cancel = true; 
} 
else { 
    try { 
    long minEmailGap = 1000 * 60 * 60 * 16; // 16 hours in milliseconds 

    File file = new File("/TimestampForMyJob.txt"); 

    if (file.exists() == false) { 
     file.createNewFile(); 
    } 
    else { 
     long currentTime = (new Date()).getTime(); 

     if (file.lastModified() + minEmailGap > currentTime) { 
     cancel = true; 
     } 
     else { 
     file.setLastModified(currentTime); 
     } 
    } 
    } 
    catch(IOException e) { 
    // We can't tell whether the e-mail should be sent out or not, so we do nothing 
    // and it just gets sent anyway - probably the best we can do with this exception. 
    } 
}