2016-01-25 04:08:44 -05:00
# GitLab JIRA integration
2016-02-07 17:37:45 -05:00
_**Note:**
Full JIRA integration was previously exclusive to GitLab Enterprise Edition.
With [GitLab 8.3 forward][8_3_post], this feature in now [backported][jira-ce]
to GitLab Community Edition as well._
---
2016-01-25 14:29:52 -05:00
GitLab can be configured to interact with [JIRA Core] either using an
on-premises instance or the SaaS solution that Atlassian offers. Configuration
happens via username and password on a per-project basis. Connecting to a JIRA
server via CAS is not possible.
2016-01-25 04:08:44 -05:00
2016-01-25 07:48:36 -05:00
Each project can be configured to connect to a different JIRA instance or, in
2016-01-25 14:29:52 -05:00
case you have a single JIRA instance, you can pre-fill the JIRA service
settings page in GitLab with a default template. To configure the JIRA template,
see the [Services Templates documentation][services-templates].
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
Once the GitLab project is connected to JIRA, you can reference and close the
2016-01-25 17:52:04 -05:00
issues in JIRA directly from GitLab's merge requests.
2016-01-25 04:08:44 -05:00
## Configuration
The configuration consists of two parts:
- [JIRA configuration ](#configuring-jira )
- [GitLab configuration ](#configuring-gitlab )
### Configuring JIRA
2016-01-25 07:48:36 -05:00
First things first, we need to create a user in JIRA which will have access to
all projects that need to integrate with GitLab.
2016-01-25 04:08:44 -05:00
2016-01-25 17:52:04 -05:00
We have split this stage in steps so it is easier to follow.
2016-01-25 04:08:44 -05:00
2016-01-25 07:48:36 -05:00
---
1. Login to your JIRA instance as an administrator and under **Administration**
2016-01-25 14:29:52 -05:00
go to **User Management** to create a new user.
2016-01-25 07:48:36 -05:00
![JIRA user management link ](img/jira_user_management_link.png )
---
2016-01-25 17:52:04 -05:00
1. The next step is to create a new user (e.g., `gitlab` ) who has write access
2016-01-25 14:29:52 -05:00
to projects in JIRA. Enter the user's name and a _valid_ e-mail address
since JIRA sends a verification e-mail to set-up the password.
2016-01-25 07:48:36 -05:00
_**Note:** JIRA creates the username automatically by using the e-mail
2016-01-25 14:29:52 -05:00
prefix. You can change it later if you want._
2016-01-25 07:48:36 -05:00
![JIRA create new user ](img/jira_create_new_user.png )
---
2016-01-25 17:52:04 -05:00
1. Now, let's create a `gitlab-developers` group which will have write access
2016-01-25 07:48:36 -05:00
to projects in JIRA. Go to the **Groups** tab and select **Create group** .
![JIRA create new user ](img/jira_create_new_group.png )
---
Give it an optional description and hit **Create group** .
![JIRA create new group ](img/jira_create_new_group_name.png )
---
1. Give the newly-created group write access by going to
**Application access > View configuration** and adding the `gitlab-developers`
group to JIRA Core.
![JIRA group access ](img/jira_group_access.png )
---
2016-01-25 17:52:04 -05:00
1. Add the `gitlab` user to the `gitlab-developers` group by going to
2016-01-25 07:48:36 -05:00
**Users > GitLab user > Add group** and selecting the `gitlab-developers`
group from the dropdown menu. Notice that the group says _Access_ which is
what we aim for.
![JIRA add user to group ](img/jira_add_user_to_group.png )
---
2016-01-25 14:29:52 -05:00
The JIRA configuration is over. Write down the new JIRA username and its
password as they will be needed when configuring GitLab in the next section.
2016-01-25 04:08:44 -05:00
2016-01-25 14:36:12 -05:00
### Configuring GitLab
2016-01-25 14:29:52 -05:00
2016-01-25 17:59:49 -05:00
_**Note:** The currently supported JIRA versions are v6.x and v7.x. and GitLab
7.8 or higher is required._
---
2016-01-25 17:59:28 -05:00
2016-01-25 14:29:52 -05:00
Assuming you [have already configured JIRA ](#configuring-jira ), now it's time
to configure GitLab.
2016-01-25 04:08:44 -05:00
JIRA configuration in GitLab is done via a project's
[**Services** ](../project_services/project_services.md ).
To enable JIRA integration in a project, navigate to the project's
**Settings > Services > JIRA**.
2016-01-25 14:29:52 -05:00
Fill in the required details on the page, as described in the table below.
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
| Setting | Description |
| ------- | ----------- |
| `Description` | A name for the issue tracker (to differentiate between instances, for example). |
2016-01-25 17:52:04 -05:00
| `Project url` | The URL to the JIRA project which is being linked to this GitLab project. It is of the form: `https://<jira_host_url>/issues/?jql=project=<jira_project>` . |
2016-01-25 14:29:52 -05:00
| `Issues url` | The URL to the JIRA project issues overview for the project that is linked to this GitLab project. It is of the form: `https://<jira_host_url>/browse/:id` . Leave `:id` as-is, it gets replaced by GitLab at runtime. |
2016-01-25 17:52:04 -05:00
| `New issue url` | This is the URL to create a new issue in JIRA for the project linked to this GitLab project, and it is of the form: `https://<jira_host_url>/secure/CreateIssue.jspa` |
2016-01-25 14:29:52 -05:00
| `Api url` | The base URL of the JIRA API. It may be omitted, in which case GitLab will automatically use API version `2` based on the `project url` . It is of the form: `https://<jira_host_url>/rest/api/2` . |
| `Username` | The username of the user created in [configuring JIRA step ](#configuring-jira ). |
| `Password` |The password of the user created in [configuring JIRA step ](#configuring-jira ). |
| `JIRA issue transition` | This setting is very important to set up correctly. It is the ID of a transition that moves issues to a closed state. You can find this number under the JIRA workflow administration (**Administration > Issues > Workflows**) by selecting **View** under **Operations** of the desired workflow of your project. The ID of each state can be found inside the parenthesis of each transition name under the **Transitions (id)** column ([see screenshot](img/jira_issues_workflow.png)). By default, this ID is set to `2` |
2016-01-25 04:08:44 -05:00
After saving the configuration, your GitLab project will be able to interact
with the linked JIRA project.
![JIRA service page ](img/jira_service_page.png )
---
## JIRA issues
2016-01-25 14:29:52 -05:00
By now you should have [configured JIRA ](#configuring-jira ) and enabled the
[JIRA service in GitLab ](#configuring-gitlab ). If everything is set up correctly
2016-01-25 17:59:49 -05:00
you should be able to reference and close JIRA issues by just mentioning their
ID in GitLab commits and merge requests.
2016-01-25 14:29:52 -05:00
2016-01-25 04:08:44 -05:00
### Referencing JIRA Issues
2016-01-25 14:29:52 -05:00
If you reference a JIRA issue, e.g., `GITLAB-1` , in a commit comment, a link
which points back to JIRA is created.
The same works for comments in merge requests as well.
![JIRA add GitLab commit message ](img/jira_add_gitlab_commit_message.png )
---
The mentioning action is two-fold, so a comment with a JIRA issue in GitLab
will automatically add a comment in that particular JIRA issue with the link
back to GitLab.
![JIRA reference commit message ](img/jira_reference_commit_message_in_jira_issue.png )
---
The comment on the JIRA issue is of the form:
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
> USER mentioned this issue in LINK_TO_THE_MENTION
2016-01-25 04:08:44 -05:00
Where:
| Format | Description |
| ------ | ----------- |
| `USER` | A user that mentioned the issue. This is the link to the user profile in GitLab. |
| `LINK_TO_THE_MENTION` | Link to the origin of mention with a name of the entity where JIRA issue was mentioned. Can be commit or merge request. |
2016-01-25 14:29:52 -05:00
### Closing JIRA issues
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
JIRA issues can be closed directly from GitLab by using trigger words in
2016-01-25 16:17:41 -05:00
commits and merge requests. When a commit which contains the trigger word
followed by the JIRA issue ID in the commit message is pushed, GitLab will
add a comment in the mentioned JIRA issue and immediately close it (provided
the transition ID was set up correctly).
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
There are currently three trigger words, and you can use either one to achieve
the same goal:
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
- `Resolves GITLAB-1`
- `Closes GITLAB-1`
- `Fixes GITLAB-1`
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
where `GITLAB-1` the issue ID of the JIRA project.
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
### JIRA issue closing example
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
Let's say for example that we submitted a bug fix and created a merge request
in GitLab. The workflow would be something like this:
1. Create a new branch
1. Fix the bug
2016-01-25 16:17:41 -05:00
1. Commit the changes and push branch to GitLab
2016-01-25 14:29:52 -05:00
1. Open a new merge request and reference the JIRA issue including one of the
trigger words, e.g.: `Fixes GITLAB-1` , in the description
1. Submit the merge request
1. Ask someone to review
1. Merge the merge request
1. The JIRA issue is automatically closed
2016-01-25 04:08:44 -05:00
2016-01-25 14:29:52 -05:00
---
2016-01-25 17:52:04 -05:00
In the following screenshot you can see what the link references to the JIRA
2016-01-25 14:29:52 -05:00
issue look like.
![JIRA - submit a GitLab merge request ](img/jira_submit_gitlab_merge_request.png )
2016-01-25 04:08:44 -05:00
---
2016-01-25 14:29:52 -05:00
Once this merge request is merged, the JIRA issue will be automatically closed
with a link to the commit that resolved the issue.
2016-01-25 16:17:41 -05:00
![The GitLab integration user leaves a comment on JIRA ](img/jira_issue_closed.png )
2016-01-25 04:08:44 -05:00
---
2016-01-25 16:17:41 -05:00
You can see from the above image that there are four references to GitLab:
- The first is from a comment in a specific commit
2016-01-25 17:52:04 -05:00
- The second is from the JIRA issue reference in the merge request description
2016-01-25 16:17:41 -05:00
- The third is from the actual commit that solved the issue
2016-01-25 17:52:04 -05:00
- And the fourth is from the commit that the merge request created
2016-01-25 16:17:41 -05:00
2016-01-25 07:48:36 -05:00
[services-templates]: ../project_services/services_templates.md "Services templates documentation"
2016-01-25 14:29:52 -05:00
[JIRA Core]: https://www.atlassian.com/software/jira/core "The JIRA Core website"
2016-02-07 17:37:45 -05:00
[jira-ce]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/2146 "MR - Backport JIRA service"
[8_3_post]: https://about.gitlab.com/2015/12/22/gitlab-8-3-released/ "GitLab 8.3 release post"
2016-03-03 11:21:32 -05:00
## Troubleshooting
2016-03-07 16:29:22 -05:00
### GitLab is unable to comment on a ticket
2016-03-03 11:21:32 -05:00
Make sure that the user you set up for GitLab to communicate with JIRA has the
correct access permission to post comments on a ticket and to also transition the
ticket, if you'd like GitLab to also take care of closing them.
2016-03-07 16:29:22 -05:00
### GitLab is unable to close a ticket
2016-03-03 11:21:32 -05:00
Make sure the the `Transition ID` you set within the JIRA settings matches the
one your project needs to close a ticket.