{"id":158,"date":"2026-10-12T15:22:13","date_gmt":"2026-10-12T15:22:13","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2010\/02\/25\/bamboo-a-continuous-integration-server\/"},"modified":"2026-10-12T15:22:14","modified_gmt":"2026-10-12T15:22:14","slug":"bamboo-a-continuous-integration-server","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/bamboo-a-continuous-integration-server\/","title":{"rendered":"Bamboo CI Server Guide: Workflow, Agent Scaling, Integrations, and Operational Practices"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2010-02-25; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bamboo is Atlassian\u2019s continuous integration server for automating builds, tests, and release feedback. This guide is for DevOps engineers, build owners, and team leads who want a clear, operational view of how Bamboo pipelines run, how agents are scaled, and how integrations improve developer feedback loops.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Original source material: <a href='https:\/\/www.devopsschool.com\/blog\/bamboo-a-continuous-integration-server\/'>article permalink<\/a> and <a href='https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/02\/bamboo-a-continuous-integra.png'>banner image<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Bamboo CI works in practice<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At a high level, Bamboo watches source changes or schedules, queues build plans, assigns work to available agents, and publishes results back to teams and connected tools.<\/p>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Developer commits code] --> B[Trigger fires in Bamboo]\n    B --> C[Build plan enters queue]\n    C --> D{Agent available?}\n    D -- no --> E[Wait or scale agents]\n    D -- yes --> F[Run build and tests]\n    F --> G[Publish artifacts and reports]\n    G --> H[Notify team and linked tools]\n    H --> I{Build passed?}\n    I -- no --> J[Investigate and fix]\n    I -- yes --> K[Promote for next environment]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Core Bamboo capabilities for CI operations<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Build triggers:<\/strong> commit-triggered, scheduled, manual, and dependency-triggered builds.<\/li><li><strong>Queue control:<\/strong> reorder queued builds, stop in-progress builds, and prioritize urgent plans.<\/li><li><strong>Notifications:<\/strong> team updates via email, RSS, IM\/XMPP, and IDE-oriented signals.<\/li><li><strong>Integrations:<\/strong> connectors with tools such as JIRA, Confluence, FishEye, Eclipse, IntelliJ IDEA, and Clover (as described in the original material).<\/li><li><strong>Reporting:<\/strong> plan success rates, duration trends, failed test visibility, and team\/author activity views.<\/li><li><strong>Extensibility:<\/strong> plugin ecosystem plus REST API-based automation.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Agent strategy: local vs remote vs elastic<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Choosing the right agent model affects feedback speed, cost, and operational complexity.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Agent type<\/th><th>Where it runs<\/th><th>Best for<\/th><th>Trade-offs<\/th><\/tr><\/thead><tbody><tr><td>Local agent<\/td><td>On the Bamboo server host<\/td><td>Small teams, simple setups, low admin overhead<\/td><td>Competes with server resources; limited horizontal scale<\/td><\/tr><tr><td>Remote agent<\/td><td>Separate on-prem or VM hosts<\/td><td>Parallel builds, environment isolation, multi-platform testing<\/td><td>Requires agent fleet management and capability mapping<\/td><\/tr><tr><td>Elastic agent<\/td><td>Amazon EC2 (as stated in the original post)<\/td><td>Burst capacity for peak queues and variable workloads<\/td><td>Cloud cost control, image maintenance, and startup latency<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Notifications and collaboration channels<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Channel<\/th><th>Typical audience<\/th><th>Useful for<\/th><\/tr><\/thead><tbody><tr><td>Email<\/td><td>Developers, QA, release managers<\/td><td>Plan-level pass\/fail summaries and escalation workflows<\/td><\/tr><tr><td>RSS<\/td><td>Teams tracking multiple plans<\/td><td>Lightweight monitoring of project-wide build status<\/td><\/tr><tr><td>IM\/XMPP<\/td><td>Chat-first teams<\/td><td>Fast response loops and basic build interaction<\/td><\/tr><tr><td>IDE notifications<\/td><td>Individual developers<\/td><td>Immediate local awareness of failing builds or tests<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Example: command-based build step Bamboo can run<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original article notes support for custom command-line and shell-script builders. A common pattern is to call a repository script from a Bamboo job task:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\"><span class=\"hljs-meta\">#!\/usr\/bin\/env bash<\/span>\n<span class=\"hljs-keyword\">set<\/span> -euo pipefail\n\necho CI run started at $(date -u +%FT%TZ)\n.\/mvnw -B -ntp clean test\n.\/mvnw -B -ntp package\n\nmkdir -p artifacts\ncp target\/*.jar artifacts\/\necho Build complete<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Typical follow-up configuration in Bamboo is to publish the <code>artifacts\/<\/code> directory and parse test reports generated by your test framework so failures are visible in build results.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Build analysis and visibility patterns<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Track build duration trends to catch performance regression early.<\/li><li>Separate flaky-test noise from deterministic failures.<\/li><li>Review failed build history by plan and by author to identify recurring hotspots.<\/li><li>Use labels\/comments on build results to communicate QA status and release readiness.<\/li><li>Compare plans by success rate and time-to-fix to prioritize engineering effort.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Security and governance considerations<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Use centralized authentication integrations (for example LDAP\/Crowd, where available in your deployment).<\/li><li>Apply least-privilege plan permissions for developers, release managers, and admins.<\/li><li>Restrict who can edit triggers, deployment-critical plans, and shared credentials.<\/li><li>Audit plugin usage and remove unused extensions to reduce operational risk.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reference links from the original article<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href='http:\/\/www.atlassian.com\/software\/bamboo\/features\/'>Bamboo features<\/a><\/li><li><a href='http:\/\/confluence.atlassian.com\/display\/BAMBOO\/Bamboo+101'>Bamboo 101<\/a><\/li><li><a href='http:\/\/forums.atlassian.com'>Atlassian forums<\/a><\/li><li><a href='https:\/\/plugins.atlassian.com\/search\/by\/bamboo'>Bamboo plugins<\/a><\/li><li><a href='http:\/\/confluence.atlassian.com\/display\/BAMBOO\/Bamboo+Plugin+Guide'>Bamboo Plugin Guide<\/a><\/li><li><a href='http:\/\/www.atlassian.com\/better-together\/progress_report.jsp'>JIRA and Bamboo<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Keep build scripts in version control and call them from Bamboo jobs.<\/li><li>Design plans for fast feedback first, then add slower nightly or extended test plans.<\/li><li>Use agent capabilities\/tags to route jobs to the right runtime and toolchain.<\/li><li>Treat queue health as an SLO: long queues usually indicate missing capacity or oversized plans.<\/li><li>Validate historical feature assumptions against your current Bamboo version before implementation.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Bamboo is Atlassian\u2019s CI server for automating builds, tests, and team feedback. This revised guide explains practical workflows, scaling models, integrations, and day-2 practices for DevOps teams.<\/p>\n","protected":false},"author":1,"featured_media":4171,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[30],"tags":[3588,3580,3584,3586,3585,3592,3591,3593,172,3583,3582,3594,3579,3578,3581,3589,995,101,3417,588,399,3590,3587],"class_list":["post-158","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bamboo","tag-about-atlassian-bamboo","tag-atlassian-bamboo","tag-atlassian-bamboo-complete-guide","tag-atlassian-bamboo-getting-started","tag-atlassian-bamboo-introduction","tag-atlassian-bamboo-introduction-reference","tag-atlassian-bamboo-overview","tag-atlassian-bamboo-resources","tag-bamboo","tag-bamboo-advantages","tag-bamboo-benefits","tag-bamboo-features","tag-bamboo-guide","tag-bamboo-tutorial","tag-bamboo-usage","tag-complete-introduction-of-atlassian-bamboo","tag-continuous","tag-continuous-integration","tag-continuous-integration-server","tag-integration","tag-server","tag-understand-bamboo","tag-what-is-atlassian-bamaboo"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/158","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=158"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/158\/revisions"}],"predecessor-version":[{"id":79008,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/158\/revisions\/79008"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4171"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}