Jenkins - Change subject in email-ext plugin - jenkins

I am using email-ext plugin to trigger emails after the build fails or become unstable. The build becomes unstable when some of the tests fail and the build fails when the compilation fail.
Can we use conditions to display different customized subject depending on the cause of the email trigger?

Yes, below the Editable email notification interface there should be an Advanced settings.. button which will give you access to various triggers. As you add & configure the triggers, you'll note an Advanced.. button for each of them, which will allow you to fully customize the e-mail template.

Related

Send an email when Jenkins has specific exception or error

On Jenkins sometimes errors occurs but I want notify different people depending the error.
IE: When SSH command do an exception I want don't send email or send to a dummy account and when a production check fail send to me. (all this happen in one task)
is it possible? how?
thanks in advance
Use Jenkins Email-ext plugin.
It has the complete flexibility for recipients (and content) based on many conditions, including log content, which allows to analyze which command has failed and change the recipient list accordingly.
Because you don't provide much details about your task and what exactly is "SSH do an exception" or "production check", it is hard to be very specific, but you can, for example, examine log for "production check has failed" or any other desired text and allow or suppress email based on this examination.
Install the plugin
Select the checkbox labeled "Editable Email Notification" in the "Post-build Actions" section.
Leave "Failure - Any" trigger if you want to prrocess mail configuration for any failure; otherwise, delete failure and add desired triggers from the dropdown
There are multiple ways to allow or cancel email sending, the complete description is in documentation on the plugin page. The simplest way is to use Pre-send Script feature. From documentation section Advanced configuration / Pre-send Script:
You may also cancel sending the email by setting the boolean variable "cancel" to true.
In Pre-send Script add a Groovy script to evaluate a condition and set a variable cancel to true or false in order to send or prevent email. For example, based on "production check has failed" line existense in the build log:
cancel = build.logFile.text.readLines().any { it =~ /.*production check has failed.*/ }

Executing Jenkins email-ext plugin not as last post-build action

I am using the email-ext plugin v.2.38.1 (post-build action "Editable Email Notification") on Jenkins v.1.566 to send e-mails after the build when certain conditions are met.
When using multiple post-build actions, I got the impression that the email-ext plugin always comes last and is executed after all other actions, no matter how I put the order of actions in the configuration. Other plugins respect the order and are executed accordingly as described in this issue.
Is there any possibility to execute another post-build action after sending the e-mails? In my case, I would like to run a shell script doing some clean-up in the workspace which cannot run before because it will delete a file that is part of the e-mail body.
One could work around this by defining an extra clean-up job which is triggered after the main job is completed, however, I would prefer having everything defined in one job only.
The emailing is a publishing action which occures always after build and post build actions ..
Additionally I think you should clean something before running the job (at startup eventually) but never at the end.
How can you study your issues if you destroy all materials that should enable you to do so ?
The step Editable Email Notification is always executed at last in the post-build actions, but you can use a Editable Email Notification Templates step which can be executed in the order you specified in post-build actions

Jenkins email-ext plugin "ghost" configuration issue

We have an old install of Hudson (ver. 1.379, yes that old...) that hasn't been upgraded yet (and I am not quite sure when and if it will be by the people responsible for it).
There seems to be some place, apparently unaccessible from the web interface, were additional recipients for the email-ext plugin were added...
Problem is, those recipients no longer exist and quite a few people (mostly unrelated to the people who use Hudson) get spammed by bounces from those emails...
For email-ext I get this in the plugin page:
version: 2.12 installed: 2.8
I have looked at the configs and I believe email-ext config should be under "Editable Email Notification" of that job...
I see some of the recipients of those emails but not the person who left, it looks like this was configured elsewhere, maybe manually in some sort of config file.
Where can I look for this?
Thank you!
Puzzled!
There is global configuration. Go to Manage Hudson, then Configure System (the wording my be different based on your version, but you should end up here http://<hudsonurl>/configure. You need to have global administrative permissions to access this, but based on what you are saying, it sound like you do not.
Based on your version of the plugin, under Extended E-mail Notification, you will see Default Recipients. Older versions of the plugin did not have that feature.
Also, under the job configuration itself, there are several places to override/add to the list of recipients, the most buried of which is under the Triggers
Click Advanced... button under Editable Email Notification
For each trigger, click Expand link.
Lastly, it is possible that people are included on the emails cause they were Culprits. In Hudson's terms, these are people who committed to SCM since the last successful build. If the build has been failing since then for a long time, they are just there as culprits. The only way to "reset" the culprits is to let the job build successfully

To get build status through environment variable

I am using jenkins for continous integration.
For my build purpose, i triggering email using Ant task. I am not able to find an environment variable to pass ant for sending email build status(success/failure/stable).
i want to know how can i get environment variable for build status?..if not available, what is the alternative option for build status?
Thanks in Advance
varghese
Why use ANT to send emails from Jenkins when you have two great plugins that does just that?
The default mail notification is quite good, and if you would like to have more control
I suggest using the Email-ext plugin which is very comprehensive.
If still wish to use ANT to sent your mail-notifications including the status
you will have to break your process into two steps,
where the first part runs the build and the second one runs the ANT script to report the status.
In this case, you will need to trigger the second job from the first job via the Parameterized Build plugin -
see my answer here:
trigger other configuration and send current build status with Jenkins
The build status is not set until the job has finished running, so there is no easy way to push build status to a process triggered within the build itself. You could pull build status via the API, but this would have to be an externally triggered process due to the constraint mentioned above. Any reason you aren't using the built in email support or one of the excellent email extension plugins such as this one?

Jenkins - Trigger email based on input parameter

I have several Jenkins jobs where I want an email to be triggered (or not trigger) based on an input parameter.
The use case is that I have one deploy job per project, but that job is parametrized for each environment. We you run the job you can select which environment to deploy to (Dev1, Dev2, QA, etc). Ideally I would like to send out notification emails when a new build is sent to QA, but I do not want to send out notification emails when a new build is sent to Dev, because that happens all the time (with every developer commit) and would flood email boxes.
I've tried googling but haven't yet found a solution. I am currently using the email-ext plugin.
Thanks.
It is a very nasty way to solve the problem, but if you cannot do it by any other means...
Create a dependent job that exists primarily to pass / fail based on the value of the parameter, which would get passed as a parameter to the job. Then you could chain the decision the job made to the email notification.
Of course, if you were going to do this, it would probably be better to just write a small parametrized email sender using javax.mail and have Jenkins run it by "building" an ANT project that actually calls the "java" task. Then you have your own email sender (full control) and could make it a dependent job on the other tasks.
I hope someone chimes in with a simpler way...
In email-ext you can add a "Script - Before Build" or a "Script - After Build" trigger which will trigger on whether the specified groovy script returns true or false.
The help for the script reads:
Use this area to implement your own trigger logic in groovy. The last line will be evaluated as a boolean to determine if the trigger should cause an email to be sent or now.
They don't give many details of what's available in the script, but from the source code on Github, it looks like you have "build" and "project" at least, and some common imports done for you:
cc.addCompilationCustomizers(new ImportCustomizer().addStarImports(
"jenkins",
"jenkins.model",
"hudson",
"hudson.model"));
Binding binding = new Binding();
binding.setVariable("build", build);
binding.setVariable("project", build.getParent());
binding.setVariable("rooturl", JenkinsLocationConfiguration.get().getUrl());
binding.setVariable("out", listener.getLogger());
Caveat, I haven't tried this, but this should work as an example script:
build.buildVariables.get("MY_DEPLOYMENT_ENV") == "QA"
that should get the value of a String or Choice parameter you've created called "MY_DEPLOYMENT_ENV" and trigger the email if the current value is "QA"

Resources