How can I get the PR reviewers email address in jenkins job - jenkins

I'm running a jenkins job to generate a report. Post the build I wan to sent that report to the person reviewed the PR. How can I achieve this using bitbucket and jenkins. Only the reviewer should get the report.

There is no such plugin to give you details of PR reviewer. Github Pull Request Builder plugin expose a limited number of environment variable. But you can try to write simple script or command to use Github API.
As you are using Bitbucket you can do something similar using BB API (link)
curl -X GET -u "user:pass" "https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}/pullrequests/{pull_request_id}" | jq '.participants[] | select(.state=="approved")| .user.display_name'
With above curl command you will get display name of your PR approvers. You can not fetch any users email using BB API, so if it is under your company you may create a file having display name to email mapping and source it to send emails.

Related

Gerrit Reviewers name and email in Jenkins

I am trying to integrate Gerrit Code Review with Jenkins and I need to get an email names of all Reviewers that are assigned to a change that triggered Jenkins job.
I have found this fragment of Gerrit Code Review plugin with all environmental variables listed, but there is nothing about reviewers.
My goal: send email notification about job status (in Jenkins job Post-Actions via email-ext plugin) to change owner, reviewers patchset creators and job owner.
My question is: is there any way of obtaining Gerrit Reviewers emails and parsing them into Jenkins as a variable?
You can use the REST API, like in the following example:
curl --silent --user USER:PASS --request GET https://GERRIT-SERVER/a/changes/CHANGE-NUMBER/reviewers | sed 1d | jq --raw-output '.[].email'
See more info on Gerrit documentation here.

How do I send jenkins build log as an attachment to a slack channel and JIRA

I want to have the option to send the whole jenkins build log to a slack channel. I currently output the status of the builds successfully to slack, I would like to send the build log if the build fails. Does anyone know how to do this?
I have tried creating a shell script to zip up the log on the jenkins server and then posting it.
You can use Incoming WebHooks or Slash Commands both are the same.
I'm also using both for sending my Jenkins to build artifact to slack channel but.
You can add an attachment also in this hooks or Jenkins generate URL for all build artifacts and you can just pass that URL on slack and user can download it via slack.
you have to user slack plugin on Jenkins and configure your slack token and stuff like that.
If you need more detail contact me.

BitBucket WebHook Jenkins

I'd like to configure bitbutcket to trigger a jenkins build.
I've spent some time researching this and all the answers are from a few years ago, and have not found any guides because things seem to have changed since.
What I'm trying to do:
A bitbucket push to a particular branch triggers a build.
What I've got:
Bitbucket web hooks which fires HTTP request to Jenkins on a push to any branch. I've also installed the Bitbucket plugin on Jenkins which adds a check box in the job config Build when a change is pushed to BitBucket. This checkbox doesnt seem to work (maybe I set it up wrong? minimal docs for this), despite me pushing to the configured branch in the SCM section.
Problem 1: Bitbucket does not fire a GET, but another request which causes a 403. I tested with postman, and it works with a GET, but not a POST.
Problem 2: This HTTP build request is fired on pushes to any branch. While the build is still restricted to a particular branch, it seems unnecessary to be rebuilding all the time.
How do i address these issues? Bitbucket does not seem to be very flexible in customizing this. The Jenkins plugin for bitbucket has a lot of 'bad' reviews. How are developers currently doing this?
SPECIFIC solution for Jenkins CI server--Webhook to Jenkins for Bitbucket plugin has been commercialized in latest version of Bit-Bucket and the current price is around $4800 which was earlier a free offering, because of this, guys who want to save their bucks, can go to the alternative solution by using webhooks feature of bit-bucket:-
Steps to create a webhook:-
BitBucket Side
1) Go to your bitbucket repo, click on Repository Setting, under WORKFLOW got for WEBHOOKS option and create a webhook.
a) creation of webhook:- URL https://JenkinsserverURL/git/notifyCommit?url=https://bitbucket.repository-link/repository.git
b) In the name tab, give any name of your choice
c) click on TEST CONNECTION before saving it. Make sure you get http status 200
d) View details your logs, check your request and response is correct.
Things to take care of from
Jenkins Side:-
1) Make sure repository mentioned in bitbucket webhook is used in Jenkins job.
2) In SCM option, activate/select Poll SCM option, don't mention anything in the schedule, leave it blank.
3) configure rest job,
Whenever your git repo observes any change an automatic build will get triggered in Jenkins. By default push trigger is activated and if you want to activate other action, please select those events while creating webhook.
***to specify the branch in repository webhook:-
http://yourserver/git/notifyCommit?url=<URL of the Git repository>[&branches=branch1[,branch2]*][&sha1=<commit ID>]
Cheers,
Is your Jenkins URL accessible from your bitbucket server? If yes that it should be fairly simple to do it. You add the webhook in your repository as http://<url-of-jenkins>/git/notifyCommit?url=<url-of-repository>. When jenkins receives this POST, it automatically triggers builds on those jobs that use this git repo with that URL you give in webhook.
But you also need to make sure your Build Schedule is set to empty for those jobs. otherwise it wont get triggered. You can specify a branch in webhook URL too
See the Push Notification from repository here
https://wiki.jenkins.io/display/JENKINS/Git+Plugin
For anyone here after July 2022, here are the simple steps I followed to make it work.
Create a live Jenkins URL
First, create a tunnel from a live URL to your local Jenkins URL using ngrok because using locahost:8080 directly as your webhook URL on bitbucket will simply not work as bitbucket does not recognize your local computer.
ps: ngrok claims to be the fastest way to put anything on the internet and I agree,
you can use it beyond Jenkins once you know the trick,
such as quickly handling out your localhost react app for testing by your friends
out of your local network
To do this is simple. For Linux:
Install ngrok snap install ngrok
Add authtoken ngrok config add-authtoken <token>
Don't have an auth token, sign up
Start a tunnel on your Jenkins port eg ngrok http 8080
To know more and for other OS, check ngrok download page
You will then get a response like
ngrok (Ctrl+C to quit)
Hello World! https://ngrok.com/next-generation
Session Status online
Account <your email>#<domain>.com (Plan: <plan type>)
Version 3.0.6
Region Europe (eu)
Latency 162ms
Web Interface <web interface url>
Forwarding https://<your-assigned-host>.ngrok.io -> http://localhost:8080
Basically, the web interface URL on click gives you a web interface to inspect all the requests being tunnelled from your ngrok live URL to your local host.
Forwarding URL is basically a proxy to your localhost, so when you want to configure webhook, instead of using locahost:8080, you replace it with ngrok URL eg https://syue-162-34-12-01.eu.ngrok.io and all requests get tunnelled to localhost:8080
Hook up the URL on bitbucket cloud
Secondly, configure your Bitbucket repository with a Webhook, using URL JENKINS_URL/bitbucket-hook/ (no need for credentials but do remember the trailing slash) eg https://syue-162-34-12-01.eu.ngrok.io/bitbucket-hook/
If you are using bitbucket server and not cloud or you want to know more, the bitbucket plugin documentation for Jenkins is pretty straightforward and easily understandable, see bitbucket plugin
then you can inspect all your webhook requests on the web interface URL or via your terminal as well as check your build logs on Jenkins via your localhost port or ngrok live url.
Disclaimer: I have not figured out how to enable build only when a specific branch change but you can configure jenkins to only build a specific branch or any branch created as your need may demand, check Source Code Management and Build Triggers

JIRA issue on jenkins job failure

I want to integrate Jenkins with jira so that, as soon as a build fails an issue is created in jira. I have already tried jira create issue in jenkins but its not creating any issue
Look at this question: Execute Shell Script after post build in Jenkins
The accepted answer by #Daniel Magnussen refers to http://wiki.hudson-ci.org/display/HUDSON/Post+build+task This is what you need as well
When the build fails, just send a curl request to jira's rest api to create a new issue. Here is some info on how to create the issue with curl:
https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials/jira-rest-api-example-create-issue

Create a job in Jenkins automatically when a repo is created in Phabricator

I have a repo in phabricator and cloned in my local machine.
Now I want to create a new Jenkins job automatically after creating a new repo in Phabricator. Jenkins API is available to create a new job remotely.
According to Jenkins:
To create a new job, post config.xml to this URL with query parameter name=JOBNAME. You need to send a Content-Type: application/xml header.
I can create a job by the following command using terminal.
curl -X POST -H "Content-Type:application/xml" -d "<project><builders/><publishers/><buildWrappers/></project>" "http://ip:port/createItem?name=AA_TEST_JOB1"
Question: How can I run the command by Harbormaster to create a Jenkins job and also send config.xml file for the configuration of that new job?
Guy Warner (http://www.guywarner.com/) has done a lot of work to show how this is possible. You can visit his blog post for more details: http://www.guywarner.com/2014/05/integrating-jenkins-and-phabricator.html (part 1) and http://www.guywarner.com/2014/06/part-2-integrating-phabricator-and.html (part 2).
The basic idea is that your Harbormaster Build Plan will make an HTTP request to your Jenkins instance.
We used his tutorials to setup almost 100 builds that trigger from Phabricator based on different types of changes.
Actually, there is no settings or automatic way to create a Jenkins job after creating a new repo in Phabricator.
I've solved this editing Phabricator php codes. Simple way is to call the Jenkins API from php codes after creating a repo.

Resources