Merge branch '14669-bugzilla-integration' into 'master'
Bugzilla Integration ## What does this MR do? Adds Bugzilla as a project service for external issue tracking ## Are there points in the code the reviewer needs to double check? ## Why was this MR needed? Provides a notable Bugzilla option for use as an external issue tracker. Existing Custom Issue tracker can be used to setup Bugzilla but this makes it clear that Bugzilla is an option. ## What are the relevant issue numbers? Closes #14669 ## Screenshots (if relevant) ## Does this MR meet the acceptance criteria? - [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added - [x] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md) - [ ] API support added - Tests - [x] Added for this feature/bug - [x] All builds are passing - [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [x] Branch has no merge conflicts with `master` (if you do - rebase it please) - [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) See merge request !4930
This commit is contained in:
commit
a4b1fe4de9
|
@ -18,6 +18,7 @@ v 8.10.0 (unreleased)
|
||||||
- Check for conflicts with existing Project's wiki path when creating a new project.
|
- Check for conflicts with existing Project's wiki path when creating a new project.
|
||||||
- Remove unused front-end variable -> default_issues_tracker
|
- Remove unused front-end variable -> default_issues_tracker
|
||||||
- Add API endpoint for a group issues !4520 (mahcsig)
|
- Add API endpoint for a group issues !4520 (mahcsig)
|
||||||
|
- Add Bugzilla integration !4930 (iamtjg)
|
||||||
- Allow [ci skip] to be in any case and allow [skip ci]. !4785 (simon_w)
|
- Allow [ci skip] to be in any case and allow [skip ci]. !4785 (simon_w)
|
||||||
- Add basic system information like memory and disk usage to the admin panel
|
- Add basic system information like memory and disk usage to the admin panel
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,7 @@ class Project < ActiveRecord::Base
|
||||||
has_one :jira_service, dependent: :destroy
|
has_one :jira_service, dependent: :destroy
|
||||||
has_one :redmine_service, dependent: :destroy
|
has_one :redmine_service, dependent: :destroy
|
||||||
has_one :custom_issue_tracker_service, dependent: :destroy
|
has_one :custom_issue_tracker_service, dependent: :destroy
|
||||||
|
has_one :bugzilla_service, dependent: :destroy
|
||||||
has_one :gitlab_issue_tracker_service, dependent: :destroy, inverse_of: :project
|
has_one :gitlab_issue_tracker_service, dependent: :destroy, inverse_of: :project
|
||||||
has_one :external_wiki_service, dependent: :destroy
|
has_one :external_wiki_service, dependent: :destroy
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
class BugzillaService < IssueTrackerService
|
||||||
|
|
||||||
|
prop_accessor :title, :description, :project_url, :issues_url, :new_issue_url
|
||||||
|
|
||||||
|
def title
|
||||||
|
if self.properties && self.properties['title'].present?
|
||||||
|
self.properties['title']
|
||||||
|
else
|
||||||
|
'Bugzilla'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def description
|
||||||
|
if self.properties && self.properties['description'].present?
|
||||||
|
self.properties['description']
|
||||||
|
else
|
||||||
|
'Bugzilla issue tracker'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_param
|
||||||
|
'bugzilla'
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -32,7 +32,4 @@ class CustomIssueTrackerService < IssueTrackerService
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize_properties
|
|
||||||
self.properties = {} if properties.nil?
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -170,6 +170,7 @@ class Service < ActiveRecord::Base
|
||||||
bamboo
|
bamboo
|
||||||
buildkite
|
buildkite
|
||||||
builds_email
|
builds_email
|
||||||
|
bugzilla
|
||||||
campfire
|
campfire
|
||||||
custom_issue_tracker
|
custom_issue_tracker
|
||||||
drone_ci
|
drone_ci
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# External issue tracker
|
# External issue tracker
|
||||||
|
|
||||||
GitLab has a great issue tracker but you can also use an external one such as
|
GitLab has a great issue tracker but you can also use an external one such as
|
||||||
Jira or Redmine. Issue trackers are configurable per GitLab project and allow
|
Jira, Redmine, or Bugzilla. Issue trackers are configurable per GitLab project and allow
|
||||||
you to do the following:
|
you to do the following:
|
||||||
|
|
||||||
- the **Issues** link on the GitLab project pages takes you to the appropriate
|
- the **Issues** link on the GitLab project pages takes you to the appropriate
|
||||||
|
@ -20,6 +20,7 @@ Visit the links below for details:
|
||||||
|
|
||||||
- [Redmine](../project_services/redmine.md)
|
- [Redmine](../project_services/redmine.md)
|
||||||
- [Jira](../project_services/jira.md)
|
- [Jira](../project_services/jira.md)
|
||||||
|
- [Bugzilla](../project_services/bugzilla.md)
|
||||||
|
|
||||||
### Service Template
|
### Service Template
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Bugzilla Service
|
||||||
|
|
||||||
|
Go to your project's **Settings > Services > Bugzilla** and fill in the required
|
||||||
|
details as described in the table below.
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
| ----- | ----------- |
|
||||||
|
| `description` | A name for the issue tracker (to differentiate between instances, for example) |
|
||||||
|
| `project_url` | The URL to the project in Bugzilla which is being linked to this GitLab project. Note that the `project_url` requires PRODUCT_NAME to be updated with the product/project name in Bugzilla. |
|
||||||
|
| `issues_url` | The URL to the issue in Bugzilla project that is linked to this GitLab project. Note that the `issues_url` requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. |
|
||||||
|
| `new_issue_url` | This is the URL to create a new issue in Bugzilla for the project linked to this GitLab project. Note that the `new_issue_url` requires PRODUCT_NAME to be updated with the product/project name in Bugzilla. |
|
||||||
|
|
||||||
|
Once you have configured and enabled Bugzilla:
|
||||||
|
|
||||||
|
- the **Issues** link on the GitLab project pages takes you to the appropriate
|
||||||
|
Bugzilla product page
|
||||||
|
- clicking **New issue** on the project dashboard takes you to Bugzilla for entering a new issue
|
|
@ -30,6 +30,7 @@ further configuration instructions and details. Contributions are welcome.
|
||||||
| [Atlassian Bamboo CI](bamboo.md) | A continuous integration and build server |
|
| [Atlassian Bamboo CI](bamboo.md) | A continuous integration and build server |
|
||||||
| Buildkite | Continuous integration and deployments |
|
| Buildkite | Continuous integration and deployments |
|
||||||
| [Builds emails](builds_emails.md) | Email the builds status to a list of recipients |
|
| [Builds emails](builds_emails.md) | Email the builds status to a list of recipients |
|
||||||
|
| [Bugzilla](bugzilla.md) | Bugzilla issue tracker |
|
||||||
| Campfire | Simple web-based real-time group chat |
|
| Campfire | Simple web-based real-time group chat |
|
||||||
| Custom Issue Tracker | Custom issue tracker |
|
| Custom Issue Tracker | Custom issue tracker |
|
||||||
| Drone CI | Continuous Integration platform built on Docker, written in Go |
|
| Drone CI | Continuous Integration platform built on Docker, written in Go |
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
# == Schema Information
|
||||||
|
#
|
||||||
|
# Table name: services
|
||||||
|
#
|
||||||
|
# id :integer not null, primary key
|
||||||
|
# type :string(255)
|
||||||
|
# title :string(255)
|
||||||
|
# project_id :integer
|
||||||
|
# created_at :datetime
|
||||||
|
# updated_at :datetime
|
||||||
|
# active :boolean default(FALSE), not null
|
||||||
|
# properties :text
|
||||||
|
# template :boolean default(FALSE)
|
||||||
|
# push_events :boolean default(TRUE)
|
||||||
|
# issues_events :boolean default(TRUE)
|
||||||
|
# merge_requests_events :boolean default(TRUE)
|
||||||
|
# tag_push_events :boolean default(TRUE)
|
||||||
|
# note_events :boolean default(TRUE), not null
|
||||||
|
#
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe BugzillaService, models: true do
|
||||||
|
describe 'Associations' do
|
||||||
|
it { is_expected.to belong_to :project }
|
||||||
|
it { is_expected.to have_one :service_hook }
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'Validations' do
|
||||||
|
context 'when service is active' do
|
||||||
|
before { subject.active = true }
|
||||||
|
|
||||||
|
it { is_expected.to validate_presence_of(:project_url) }
|
||||||
|
it { is_expected.to validate_presence_of(:issues_url) }
|
||||||
|
it { is_expected.to validate_presence_of(:new_issue_url) }
|
||||||
|
it_behaves_like 'issue tracker service URL attribute', :project_url
|
||||||
|
it_behaves_like 'issue tracker service URL attribute', :issues_url
|
||||||
|
it_behaves_like 'issue tracker service URL attribute', :new_issue_url
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when service is inactive' do
|
||||||
|
before { subject.active = false }
|
||||||
|
|
||||||
|
it { is_expected.not_to validate_presence_of(:project_url) }
|
||||||
|
it { is_expected.not_to validate_presence_of(:issues_url) }
|
||||||
|
it { is_expected.not_to validate_presence_of(:new_issue_url) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue