<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Automation on IT Comparison</title><link>https://comparison.metacog.co.kr/tags/automation/</link><description>Recent content in Automation on IT Comparison</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 03 Aug 2026 05:15:02 +0900</lastBuildDate><atom:link href="https://comparison.metacog.co.kr/tags/automation/index.xml" rel="self" type="application/rss+xml"/><item><title>CI vs CD: Continuous Integration vs Continuous Delivery/Deployment</title><link>https://comparison.metacog.co.kr/posts/2026-08-03-ci-vs-cd-continuous-integration-vs-continuous-delivery-deplo/</link><pubDate>Mon, 03 Aug 2026 05:15:02 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-03-ci-vs-cd-continuous-integration-vs-continuous-delivery-deplo/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;CI (Continuous Integration) and CD (Continuous Delivery/Deployment) are two connected stages of the same pipeline, not synonyms. CI focuses on &lt;strong class="kw"&gt;automated testing&lt;/strong&gt; of every code change as it merges, while CD focuses on &lt;strong class="kw"&gt;automated deployment&lt;/strong&gt; of that validated code into staging or production. Teams that only automate the first half often assume they have full &amp;lsquo;CI/CD&amp;rsquo; when they&amp;rsquo;ve really just automated build-and-test.&lt;/p&gt;
&lt;h2 id="comparison-diagram"&gt;Comparison Diagram&lt;/h2&gt;
&lt;div class="compare-diagram"&gt;
&lt;svg viewBox="0 0 640 360" xmlns="http://www.w3.org/2000/svg" font-family="sans-serif"&gt;&lt;line x1="25" y1="140" x2="315" y2="140" style="stroke:var(--compare-a)" stroke-width="2"/&gt;&lt;line x1="25" y1="140" x2="25" y2="150" style="stroke:var(--compare-a)" stroke-width="2"/&gt;&lt;line x1="315" y1="140" x2="315" y2="150" style="stroke:var(--compare-a)" stroke-width="2"/&gt;&lt;text x="170" y="122" text-anchor="middle" font-size="18" font-weight="bold" style="fill:var(--primary)"&gt;CI&lt;/text&gt;&lt;line x1="325" y1="140" x2="615" y2="140" style="stroke:var(--compare-b)" stroke-width="2"/&gt;&lt;line x1="325" y1="140" x2="325" y2="150" style="stroke:var(--compare-b)" stroke-width="2"/&gt;&lt;line x1="615" y1="140" x2="615" y2="150" style="stroke:var(--compare-b)" stroke-width="2"/&gt;&lt;text x="470" y="122" text-anchor="middle" font-size="18" font-weight="bold" style="fill:var(--primary)"&gt;CD&lt;/text&gt;&lt;rect x="25" y="150" width="90" height="60" rx="4" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="70" y="185" text-anchor="middle" font-size="13" style="fill:var(--content)"&gt;Commit&lt;/text&gt;&lt;rect x="125" y="150" width="90" height="60" rx="4" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="170" y="185" text-anchor="middle" font-size="13" style="fill:var(--content)"&gt;Build&lt;/text&gt;&lt;rect x="225" y="150" width="90" height="60" rx="4" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="270" y="185" text-anchor="middle" font-size="13" style="fill:var(--content)"&gt;Test&lt;/text&gt;&lt;rect x="325" y="150" width="90" height="60" rx="4" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="370" y="185" text-anchor="middle" font-size="13" style="fill:var(--content)"&gt;Package&lt;/text&gt;&lt;rect x="425" y="150" width="90" height="60" rx="4" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="470" y="185" text-anchor="middle" font-size="13" style="fill:var(--content)"&gt;Staging&lt;/text&gt;&lt;rect x="525" y="150" width="90" height="60" rx="4" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="570" y="185" text-anchor="middle" font-size="13" style="fill:var(--content)"&gt;Production&lt;/text&gt;&lt;line x1="115" y1="180" x2="122" y2="180" style="stroke:var(--border)" stroke-width="2"/&gt;&lt;polygon points="125,180 120,176 120,184" style="fill:var(--border)"/&gt;&lt;line x1="215" y1="180" x2="222" y2="180" style="stroke:var(--border)" stroke-width="2"/&gt;&lt;polygon points="225,180 220,176 220,184" style="fill:var(--border)"/&gt;&lt;line x1="315" y1="180" x2="322" y2="180" style="stroke:var(--border)" stroke-width="2"/&gt;&lt;polygon points="325,180 320,176 320,184" style="fill:var(--border)"/&gt;&lt;line x1="415" y1="180" x2="422" y2="180" style="stroke:var(--border)" stroke-width="2"/&gt;&lt;polygon points="425,180 420,176 420,184" style="fill:var(--border)"/&gt;&lt;line x1="515" y1="180" x2="522" y2="180" style="stroke:var(--border)" stroke-width="2"/&gt;&lt;polygon points="525,180 520,176 520,184" style="fill:var(--border)"/&gt;&lt;text x="170" y="245" text-anchor="middle" font-size="12" style="fill:var(--secondary)"&gt;Runs automatically on every commit&lt;/text&gt;&lt;rect x="325" y="225" width="290" height="55" rx="4" fill="none" style="stroke:var(--border)" stroke-width="1.5" stroke-dasharray="4 3"/&gt;&lt;text x="470" y="248" text-anchor="middle" font-size="12" style="fill:var(--secondary)"&gt;Delivery: manual approval before Production&lt;/text&gt;&lt;text x="470" y="266" text-anchor="middle" font-size="12" style="fill:var(--secondary)"&gt;Deployment: fully automatic, no gate&lt;/text&gt;&lt;text x="320" y="330" text-anchor="middle" font-size="13" style="fill:var(--content)"&gt;CI verifies the code — CD gets it running&lt;/text&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id="comparison-table"&gt;Comparison Table&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;CI (Continuous Integration)&lt;/th&gt;
&lt;th&gt;CD (Continuous Delivery/Deployment)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Trigger&lt;/td&gt;
&lt;td&gt;Code commit or push to a shared repository&lt;/td&gt;
&lt;td&gt;A successful CI run producing a new build artifact&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core process&lt;/td&gt;
&lt;td&gt;Compile, run unit/integration tests, static analysis&lt;/td&gt;
&lt;td&gt;Package the artifact, provision environments, run deployment scripts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primary output&lt;/td&gt;
&lt;td&gt;A verified, mergeable build artifact&lt;/td&gt;
&lt;td&gt;A running release in staging and/or production&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment scope&lt;/td&gt;
&lt;td&gt;Build server or ephemeral test environment&lt;/td&gt;
&lt;td&gt;Staging and/or production environments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human gate&lt;/td&gt;
&lt;td&gt;None — fully automated on every commit&lt;/td&gt;
&lt;td&gt;Optional manual approval (Delivery) or none (Deployment)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Release cadence&lt;/td&gt;
&lt;td&gt;N/A — runs per commit, not a release event&lt;/td&gt;
&lt;td&gt;Can range from multiple times a day to once per commit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure consequence&lt;/td&gt;
&lt;td&gt;Blocks the merge; breaks the build for the team&lt;/td&gt;
&lt;td&gt;Blocks or rolls back the release; production stays on the last good version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primary goal&lt;/td&gt;
&lt;td&gt;Catch integration bugs early, keep the main branch releasable&lt;/td&gt;
&lt;td&gt;Get every releasable build to users quickly and safely&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="key-differences"&gt;Key Differences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CI&amp;rsquo;s output is a verified &lt;strong class="kw"&gt;build artifact&lt;/strong&gt;, not a live release&lt;/li&gt;
&lt;li&gt;CD adds environment &lt;strong class="kw"&gt;provisioning&lt;/strong&gt; and deployment steps that CI never performs&lt;/li&gt;
&lt;li&gt;A CI failure blocks the &lt;strong class="kw"&gt;merge&lt;/strong&gt;; a CD failure blocks the rollout instead&lt;/li&gt;
&lt;li&gt;Continuous Delivery keeps a manual &lt;strong class="kw"&gt;approval gate&lt;/strong&gt; before production, while Continuous Deployment removes it&lt;/li&gt;
&lt;li&gt;CI runs on every single commit; CD can be throttled by environment or business &lt;strong class="kw"&gt;readiness&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-each"&gt;When to Use Each&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CI (Continuous Integration)&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>