{"id":57,"date":"2026-10-14T13:31:20","date_gmt":"2026-10-14T13:31:20","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2015\/11\/27\/build-and-release-concept-and-process-training\/"},"modified":"2026-10-14T13:31:20","modified_gmt":"2026-10-14T13:31:20","slug":"build-and-release-concept-and-process-training","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/build-and-release-concept-and-process-training\/","title":{"rendered":"Build and Release Management in the SDLC: SCM Concepts, Workflow, and Practical Examples"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2015-11-27; fully revised and updated.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2015\/11\/build-and-release-concept-a-1.png\" alt=\"Build and release concept and process training\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Build and release management is the discipline of turning source code into tested, deployable software in a controlled and repeatable way. This is especially useful for developers, release engineers, QA teams, and DevOps practitioners who need consistent delivery across environments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article explains where build and release fits in the software development lifecycle (SDLC), how software configuration management (SCM) supports it, and what practical workflows look like once teams begin maintaining one version while building the next.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where build and release fit in the software development lifecycle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original training content frames build and release as part of a full SDLC. In practice, each phase contributes inputs that must remain traceable through build and production release.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Planning and specifications:<\/strong> define what will be built and what \u201cdone\u201d means.<\/li><li><strong>Analysis and design:<\/strong> define architecture, components, and integration boundaries.<\/li><li><strong>Implementation:<\/strong> produce source code and supporting configuration.<\/li><li><strong>Testing:<\/strong> validate behavior against requirements with repeatable test cases.<\/li><li><strong>Releasing:<\/strong> promote a tested build to production.<\/li><li><strong>Maintenance:<\/strong> fix defects and deliver improvements while preserving service stability.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">SCM capabilities that make delivery controlled and repeatable<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SCM is the control layer that tracks change, protects baseline integrity, and enables reproducible builds. The concepts below come directly from the original topic and are still fundamental.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Resource management:<\/strong> store source, documents, and other project artifacts in a central repository.<\/li><li><strong>Workspaces:<\/strong> provide isolated working areas for contributors.<\/li><li><strong>Versioning:<\/strong> maintain revision history as the codebase evolves.<\/li><li><strong>Collaboration operations:<\/strong> support check-in, check-out, merge, and review workflows.<\/li><li><strong>History and labeling:<\/strong> mark known-good states so teams can rebuild exact snapshots.<\/li><li><strong>Build and release management:<\/strong> ensure each build is tied to a known configuration.<\/li><li><strong>Parallel development:<\/strong> allow multiple codelines (for example, maintenance and next release) to move forward safely.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Build management vs release management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These practices are related but not identical. A release is typically a production-grade build that has passed stricter controls.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Area<\/th><th>Build management<\/th><th>Release management<\/th><\/tr><\/thead><tbody><tr><td>Primary goal<\/td><td>Compile, package, and validate software frequently<\/td><td>Deliver approved software to end users in production<\/td><\/tr><tr><td>Typical frequency<\/td><td>High (per commit, per branch, or scheduled integrity builds)<\/td><td>Lower and planned (milestone or version based)<\/td><\/tr><tr><td>Quality gate<\/td><td>Unit and integration checks<\/td><td>Regression, acceptance, and operational readiness checks<\/td><\/tr><tr><td>Output<\/td><td>Build artifacts for testing or staging<\/td><td>Versioned production release with traceable baseline<\/td><\/tr><tr><td>Traceability need<\/td><td>Track source revision and build inputs<\/td><td>Record exact configuration for reproducibility and future fixes<\/td><\/tr><tr><td>Failure impact<\/td><td>Slows development feedback loop<\/td><td>Can cause production incidents and rollback events<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Typical build and release workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A practical workflow combines frequent automated builds with explicit release baselines so teams can reproduce and support what was shipped.<\/p>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Plan requirements] --> B[Develop in workspace]\n    B --> C[Commit and push to repository]\n    C --> D[Run CI build and unit tests]\n    D --> E{Checks pass}\n    E -- No --> F[Fix and rebuild]\n    F --> C\n    E -- Yes --> G[Tag configuration baseline]\n    G --> H[Create release candidate]\n    H --> I[Run regression and acceptance tests]\n    I --> J{Approved for production}\n    J -- No --> F\n    J -- Yes --> K[Release to production]\n    K --> L[Maintain release and continue next version]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Example implementation: Git and CI pipeline conventions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The following examples show a common pattern for creating a release baseline and maintaining a production branch in parallel with ongoing development.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Git commands for baseline tagging and maintenance branching<\/h3>\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 language-bash\">git checkout -b feature\/payment-retry\ngit add .\ngit commit -m <span class=\"hljs-string\">\"Add retry logic for failed payments\"<\/span>\ngit push origin feature\/payment-retry\n\n<span class=\"hljs-comment\"># After review and merge<\/span>\ngit checkout main\ngit pull origin main\ngit tag -a v1<span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.0<\/span> -m <span class=\"hljs-string\">\"Release 1.0.0 baseline\"<\/span>\ngit push origin v1<span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.0<\/span>\n\n<span class=\"hljs-comment\"># Create a maintenance line from the released baseline<\/span>\ngit checkout -b release\/<span class=\"hljs-number\">1.0<\/span> v1<span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.0<\/span>\ngit push origin release\/<span class=\"hljs-number\">1.0<\/span><\/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<h3 class=\"wp-block-heading\">Minimal CI pipeline skeleton for build, test, package, and release<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-yaml\">stages:\n  - build\n  - test\n  - package\n  - release\n\n<span class=\"hljs-attr\">build_job<\/span>:\n  stage: build\n  <span class=\"hljs-attr\">script<\/span>:\n    - .\/scripts\/build.sh\n  <span class=\"hljs-attr\">artifacts<\/span>:\n    paths:\n      - dist\/\n\ntest_job:\n  stage: test\n  <span class=\"hljs-attr\">script<\/span>:\n    - .\/scripts\/test.sh\n\n<span class=\"hljs-attr\">package_job<\/span>:\n  stage: package\n  <span class=\"hljs-attr\">script<\/span>:\n    - .\/scripts\/package.sh\n  <span class=\"hljs-attr\">dependencies<\/span>:\n    - build_job\n\n<span class=\"hljs-attr\">release_job<\/span>:\n  stage: release\n  <span class=\"hljs-attr\">script<\/span>:\n    - .\/scripts\/release.sh\n  <span class=\"hljs-attr\">rules<\/span>:\n    - <span class=\"hljs-keyword\">if<\/span>: <span class=\"hljs-string\">'$CI_COMMIT_TAG'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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<h2 class=\"wp-block-heading\">Parallel development after the first production release<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once version 1 is released, teams usually split effort into two streams: maintain the released version and continue feature work for the next version. SCM support for branching and merging is what makes this sustainable.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Keep a stable maintenance branch for urgent fixes.<\/li><li>Continue new feature work on the main development line.<\/li><li>Promote only tested, approved fixes into the maintenance branch.<\/li><li>Tag each release so exact source and build inputs can be recreated later.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Automate integrity builds and regression tests to detect breakage early.<\/li><li>Treat build scripts and pipeline definitions as version-controlled code.<\/li><li>Use immutable version tags for production releases.<\/li><li>Record artifact metadata (commit, tag, build time, environment) for traceability.<\/li><li>Define clear promotion gates from build to release to production.<\/li><li>Document branching and hotfix policies before the first release.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Original training contact paths (preserved): <a href=\"https:\/\/docs.google.com\/a\/scmgalaxy.com\/forms\/d\/1kZs21fbihV4AK2a530-9rHbCuCJR-lQj1aAmC3C0aKE\/viewform\" target=\"_blank\" rel=\"noopener\">DevOps Training Registration form<\/a> and <a href=\"mailto:info@scmGalaxy.com\">info@scmGalaxy.com<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This guide explains how build and release management fits into the software development lifecycle and how SCM keeps delivery reproducible. It covers core concepts, a practical workflow, and example Git and CI pipeline patterns.<\/p>\n","protected":false},"author":1,"featured_media":3136,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[8],"tags":[91,146,954,1357,142,884,958,883,93,94,593,92,96],"class_list":["post-57","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-training","tag-build","tag-build-and-release","tag-build-and-release-course","tag-build-and-release-process-training","tag-build-and-release-training","tag-classroom","tag-concept","tag-course","tag-engineer","tag-online","tag-process","tag-release","tag-training"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/57","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=57"}],"version-history":[{"count":5,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/57\/revisions"}],"predecessor-version":[{"id":79337,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/57\/revisions\/79337"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3136"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}