{"id":49514,"date":"2025-05-28T01:57:52","date_gmt":"2025-05-28T01:57:52","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49514"},"modified":"2025-05-28T02:03:18","modified_gmt":"2025-05-28T02:03:18","slug":"gitlab-integration-with-jira-confluence-bitbucket","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/gitlab-integration-with-jira-confluence-bitbucket\/","title":{"rendered":"GitLab Integration with Jira, Confluence &amp; Bitbucket"},"content":{"rendered":"\n<p>GitLab <strong>18.x Cloud<\/strong> has <strong>official integrations and updated guides<\/strong> for all three Atlassian use cases: <strong>Jira<\/strong>, <strong>Confluence<\/strong>, and <strong>Bitbucket migration<\/strong>.<\/p>\n\n\n\n<p>Here\u2019s the <strong>revised, accurate, GitLab 18.x\u2013compliant<\/strong> guide:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 1. GitLab \u2194\ufe0f Jira Integration (Official Support)<\/h2>\n\n\n\n<p>GitLab 18 fully supports <strong>two levels of Jira integration<\/strong>:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 a. Basic (Free Tier)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Allows <strong>commit \u2192 issue linking<\/strong> via <code>JIRA-123<\/code> tags in commit messages.<\/li>\n\n\n\n<li>Uses <strong>personal access token<\/strong> or <strong>API token<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 b. Deep (Premium+)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Supports <strong>cross-linking MRs \u2194 Jira issues<\/strong><\/li>\n\n\n\n<li>Enables <strong>automation<\/strong>: Jira transitions, MR closing on Jira status, etc.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Steps:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to:<br><code>Group \u2192 Settings \u2192 Integrations \u2192 Jira<\/code><\/li>\n\n\n\n<li>Fill in:\n<ul class=\"wp-block-list\">\n<li><strong>URL<\/strong>: <code>https:\/\/your-domain.atlassian.net<\/code><\/li>\n\n\n\n<li><strong>Username<\/strong>: Jira email<\/li>\n\n\n\n<li><strong>API Token<\/strong>: Generate from <a href=\"https:\/\/id.atlassian.com\/manage-profile\/security\" target=\"_blank\" rel=\"noopener\">id.atlassian.com\/manage-profile\/security<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Test connection and Save.<\/li>\n\n\n\n<li>Add this to commits: <code>git commit -m \"Fixes JIRA-123: description\"<\/code><\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\ud83d\udd17 GitLab auto-links commits to Jira issues and shows them in the Jira issue timeline.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 2. GitLab \u2194\ufe0f Confluence Integration<\/h2>\n\n\n\n<p>As of GitLab 18, <strong>official native integration with Confluence is limited<\/strong>, but two <strong>workable options<\/strong> exist:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Option 1: Embed GitLab Content in Confluence<\/h3>\n\n\n\n<p>Use Confluence macros to embed:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Markdown from GitLab repos (via public\/raw URL)<\/li>\n\n\n\n<li>CI\/CD status badges<\/li>\n\n\n\n<li>GitLab Pages links<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Option 2: Confluence \u2192 GitLab Webhook Integration (Automation)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>GitLab Webhooks<\/strong> to notify Confluence or automation tools (Zapier, ScriptRunner)<\/li>\n\n\n\n<li>Or use <strong>API automation<\/strong> to pull GitLab issues\/MR data into Confluence pages.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\ude80 Coming Soon:<\/h3>\n\n\n\n<p>GitLab is working on tighter <strong>Atlassian integration via Open DevOps API connectors<\/strong>, but Confluence integration remains workaround-based as of now.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 3. Migrate from Bitbucket to GitLab (Official Tooling)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Supported Bitbucket Platforms:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bitbucket Cloud \u2705<\/li>\n\n\n\n<li>Bitbucket Server (Data Center) \u2705<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Migration Steps:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to:<br><code>Group \u2192 New Project \u2192 Import \u2192 Bitbucket<\/code><\/li>\n\n\n\n<li>Authenticate using <strong>Bitbucket OAuth or App Password<\/strong><\/li>\n\n\n\n<li>GitLab auto-discovers repos \u2192 you can import:\n<ul class=\"wp-block-list\">\n<li><strong>Git history<\/strong><\/li>\n\n\n\n<li><strong>Issues and wikis<\/strong> (via API)<\/li>\n\n\n\n<li><strong>Pull requests<\/strong> (limited)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Use <a href=\"https:\/\/docs.gitlab.com\/ee\/user\/project\/import\/bitbucket.html\" target=\"_blank\" rel=\"noopener\">gitlab.com\/migrate\/bitbucket<\/a> for setup guides.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udee0\ufe0f CLI Migration Alternative:<\/h3>\n\n\n\n<p>Use Git:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">git <span class=\"hljs-keyword\">clone<\/span> --mirror https:<span class=\"hljs-comment\">\/\/bitbucket.org\/your\/repo.git<\/span>\ncd repo.git\ngit remote add gitlab https:<span class=\"hljs-comment\">\/\/gitlab.com\/your\/repo.git<\/span>\ngit push --mirror gitlab\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfaf Summary Table (GitLab 18.x)<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Task<\/th><th>GitLab Support<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td>\u2705 Jira Issue Linking<\/td><td>\u2705 Native<\/td><td>All tiers<\/td><\/tr><tr><td>\u2705 Jira Status Sync<\/td><td>\u2705 Premium+<\/td><td>MR \u2194 Jira issue<\/td><\/tr><tr><td>\ud83d\udfe1 Confluence Integration<\/td><td>\ud83d\udfe1 Indirect<\/td><td>Via embeds \/ webhooks<\/td><\/tr><tr><td>\u2705 Bitbucket Migration<\/td><td>\u2705 Native UI<\/td><td>Cloud &amp; Server<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Gitlab Sub-group &amp; Jira Mapping<\/h2>\n\n\n\n<p>in <strong>GitLab 18.x Cloud<\/strong>, it is <strong>possible<\/strong> to implement <strong>Sub-group Jira Mapping<\/strong> and related features, including <strong>hierarchical project structures<\/strong>, <strong>cross-project issue linking<\/strong>, and <strong>automated synchronization with Jira<\/strong> \u2014 with some configuration and depending on the GitLab tier (mostly Premium+).<\/p>\n\n\n\n<p>Let\u2019s go through your points with <strong>accurate, up-to-date capabilities<\/strong>:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 1. Configure Hierarchical Project Structure Mapping<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 What You Can Do in GitLab 18.x:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitLab allows full <strong>group and sub-group nesting<\/strong> (e.g., <code>org\/dev\/backend-service<\/code>).<\/li>\n\n\n\n<li>You can <strong>assign Jira integration at the group, subgroup, or project level<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 How to Set Up:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to the <strong>top-level group<\/strong> or <strong>specific subgroup<\/strong>:<br><code>Group \u2192 Settings \u2192 Integrations \u2192 Jira<\/code><\/li>\n\n\n\n<li>Enter:\n<ul class=\"wp-block-list\">\n<li>Jira URL (e.g., <code>https:\/\/yourcompany.atlassian.net<\/code>)<\/li>\n\n\n\n<li>Email\/API token<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>This applies to <strong>all projects under that group<\/strong>, including subgroups.<\/li>\n\n\n\n<li>You can <strong>override Jira settings at the project level<\/strong> if needed.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Best Practice:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>shared integration at the group level<\/strong> to simplify and enforce consistency across projects.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 2. Implement Cross-Project Issue Relationships (GitLab \u2194 Jira)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 GitLab Capabilities:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitLab 18.x supports <strong>cross-project issue linking<\/strong> using <code>blocks<\/code>, <code>relates to<\/code>, and <code>closes<\/code> keywords:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Closes gitlab-org\/frontend<span class=\"hljs-comment\">#42<\/span>\nRelates to gitlab-org\/backend<span class=\"hljs-comment\">#18<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>These work across <strong>projects and subgroups<\/strong>, and show relationships in the GitLab UI.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Jira Capabilities (via GitLab Integration):<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can <strong>link commits\/MRs<\/strong> to Jira issues using <code>JIRA-123<\/code> in:\n<ul class=\"wp-block-list\">\n<li>Commit messages<\/li>\n\n\n\n<li>Merge Request titles\/descriptions<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Jira will automatically show these as <strong>dev activity<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u2757 Important:<\/h4>\n\n\n\n<p>To link GitLab MRs\/issues <strong>to multiple Jira projects<\/strong>, you need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jira configured to allow <strong>cross-project issue keys<\/strong><\/li>\n\n\n\n<li>GitLab to support multi-project regex patterns like <code>PROJ1-\\d+|PROJ2-\\d+<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 3. Set Up Automated Synchronization<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">GitLab \u279d Jira:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When GitLab commits mention a Jira issue (e.g., <code>JIRA-456<\/code>), the following are synced:\n<ul class=\"wp-block-list\">\n<li>Commits<\/li>\n\n\n\n<li>Merge request details<\/li>\n\n\n\n<li>Deployment status<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Jira will show this under the <strong>\u201cDevelopment\u201d<\/strong> panel in the issue.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Jira \u279d GitLab:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can use <strong>webhooks in Jira<\/strong> or <strong>Jira Automation Rules<\/strong> to:\n<ul class=\"wp-block-list\">\n<li>Trigger GitLab CI jobs<\/li>\n\n\n\n<li>Post comments\/labels in GitLab issues based on Jira status changes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde0 Example Jira Automation Rule:<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>When a Jira issue is transitioned to &#8220;Ready for QA&#8221;, trigger GitLab pipeline:<\/p>\n<\/blockquote>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Trigger<\/span>: Issue transitioned\n<span class=\"hljs-attribute\">Condition<\/span>: Status = Ready for QA\n<span class=\"hljs-attribute\">Action<\/span>: Send webhook \u2192 GitLab Trigger URL with pipeline token\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Summary Table (GitLab 18.x Cloud)<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Supported in GitLab 18.x<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td>Sub-group Jira integration<\/td><td>\u2705 Yes<\/td><td>Can inherit from top-level group<\/td><\/tr><tr><td>Cross-project issue linking<\/td><td>\u2705 Yes<\/td><td>Native support with <code>relates to<\/code>, etc.<\/td><\/tr><tr><td>Jira to GitLab dev sync<\/td><td>\u2705 Yes<\/td><td>Via official Jira integration<\/td><\/tr><tr><td>GitLab to Jira webhook + auto-close issues<\/td><td>\u2705 Yes<\/td><td>With API + <code>JIRA-123<\/code> references<\/td><\/tr><tr><td>Multi-project Jira key recognition<\/td><td>\u2705 Yes<\/td><td>Requires regex pattern config<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>GitLab 18.x Cloud has official integrations and updated guides for all three Atlassian use cases: Jira, Confluence, and Bitbucket migration. Here\u2019s the revised, accurate, GitLab 18.x\u2013compliant guide: \u2705 1. GitLab&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49514","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49514"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49514\/revisions"}],"predecessor-version":[{"id":49518,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49514\/revisions\/49518"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}