Jenkins-Jira-Tools (Gitlab)
Several tools that can speed up work by automating certain workflow processes. Jenkins -> Jira <- GitLab
Setup
npm install jenkins-jira-tools --save
Configuration:
const config = require("jenkins-jira-tools").configBuilder
.setJenkinsUrl("<JENKINS_URL>")
.setJenkinsJobName("jenkins_job_name")
.setJiraProjectName("XXXX")
.setJiraApiUrl("https://<JIRA_URL>/rest/api/latest")
.setJiraUser("username", "password")
.build();
var jjt = new JJT(config);
API
findTickets
Get tickets numbers from the jenkins job change log. The data will be saved in the array, which should be given as an argument.
Parameters
Name | Type |
---|---|
output | Array |
createVersion
Create new version - based on given data - in Jira. Use versionDataBuilder
to provide proper input data. As a second argument use function to save version id as a defined variable.
Parameters
Name | Type |
---|---|
data | Object |
setterFn | Function |
updateFixVersions
Update Fix Version/s field in given tickets.
Parameters
Name | Type |
---|---|
tickets | Array |
versionId | String |
changeStatus
Change Status of given tickets. As a data
argument you can pass string value - status name - or use transitionDataBuilder
to set more options.
MAKE SURE THAT: options you want to set are available in status edit window
Parameters
Name | Type |
---|---|
tickets | Array |
data | String/Object |
assignTo
Assign selected tickets to the user. If username is not set or ""
, than ticket will be unassigned
Parameters
Name | Type |
---|---|
tickets | Array |
username | String |
addComment
Add comment to tickets.
Parameters
Name | Type |
---|---|
tickets | Array |
comment | String |
Helpers
ConfigBuilder
const configBuilder = require("jenkins-jira-tools").configBuilder
setJiraApiUrl(url)
setJiraUser(username, password)
setJiraProjectName(name)
[optional] setJiraTicketIdPattern(pattern)
With this method you set pattern to extract ticket numbers from commits.
If it's not set than module uses (${jiraProjectName}-[0-9]{0,})[^d]{0}
setJenkinsUrl(url)
setJenkinsJobName(name)
[optional] setJenkinsBuildXMLUrl(url)
This method sets the url to the jenkins build XML file.
If it's not set than module uses ${jenkinsUrl}/job/${jenkinsJobName}/lastBuild/api/xml
build()
VersionDataBuilder
const versionDataBuilder = require("jenkins-jira-tools").versionDataBuilder
setDescription(value)
setReleased(value)
setArchived(value)
[optional] setProject(value)
If it's not set than value is taken from main config jiraProjectName
[optional] setName(value)
If it's not set than value is read from package.json file.
build()
TransitionDataBuilder
const transitionDataBuilder = require("jenkins-jira-tools").transitionDataBuilder
setComment(value)
setResolution(value)
setStatus(value)
setAssignee(value)
build()
How to use it:
Usage is very simple. You have to create some js file which you can call in jenkins pipeline step. In most cases, this step should be triggered only when releasing from master branch.
JS (updateJira.js):
const JJT = require("./src/index.js").JJT;
const config = require("jenkins-jira-tools").configBuilder
.setJenkinsUrl("<JENKINS_URL>")
.setJenkinsJobName("jenkins_job_name")
.setJiraProjectName("XXXX")
.setJiraApiUrl("https://<JIRA_URL>/rest/api/latest")
.setJiraUser("username", "password")
.build();
const versionData = require("jenkins-jira-tools").versionDataBuilder
.setArchived(false)
.setReleased(true)
.setDescription("New is always better")
.build();
const transitionData = require("jenkins-jira-tools").transitionDataBuilder
.setResolution("Done")
.setStatus("Closed")
.setComment("This ticket is closed. Well done!")
.build();
var versionId;
var tickets = [];
var jjt = new JJT(config);
versionIdPtr = function(value) {
if(value) {
versionId = value;
return;
} else {
return versionId;
}
}
jjt.findTickets(tickets)
.createVersion(versionData, versionIdPtr)
.updateFixVersions(tickets, versionIdPtr)
.changeStatus(tickets, transitionData) /* or .changeStatus(tickets, "Closed") */
.assignTo(tickets, "");
JENKINS:
...
sh "node updateJira.js"
...