Continuous integration

지속적 통합

Merge changes frequently and run automated checks to catch integration failures early.

···
html
<div class="stage" data-phase="0"><div class="title">COMMIT → CHECKS</div><div class="row track"><span class="panel mono">a81f</span><span class="line"></span><span class="panel gate">lint</span><span class="panel gate">test</span><span class="panel gate">package</span></div><div class="panel result">New commit queued</div></div>
css
.stage{width:min(94vw,760px);height:min(88vh,330px);padding:clamp(9px,2.6vmin,20px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,2.5vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;display:flex;flex-direction:column;gap:clamp(6px,1.7vmin,12px);overflow:hidden;position:relative}.stage *{min-width:0}.stage .title{color:var(--accent);font-weight:800}.stage .sub{color:var(--muted)}.stage .row{display:flex;align-items:center;gap:clamp(5px,1.6vmin,12px)}.stage .panel{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px)}.stage .mono{font-family:ui-monospace,SFMono-Regular,monospace;font-size:clamp(12px,2.5vmin,15px)}.stage .grow{flex:1}.stage .on{color:var(--accent)}.track{flex:1;justify-content:center}.track .line{height:2px;flex:1;background:var(--line);position:relative}.track .line:after{content:'';position:absolute;left:0;top:-4px;width:10px;height:10px;border-radius:50%;background:var(--accent);animation:travel 3.6s infinite}.gate{transition:background .25s,color .25s}.stage[data-phase="1"] .gate:nth-last-child(3),.stage[data-phase="2"] .gate:nth-last-child(3),.stage[data-phase="2"] .gate:nth-last-child(2){background:var(--accent);color:var(--surface);border-color:var(--accent)}.stage[data-phase="1"] .result:after{content:' · lint passed'}.stage[data-phase="2"] .result:after{content:' · tests passed' }@keyframes travel{from{left:0}to{left:calc(100% - 10px)}}
js
const stage=document.querySelector('.stage');let phase=0;function advance(){phase=(phase+1)%3;stage.dataset.phase=String(phase)}const timer=setInterval(advance,1200);stage.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})

Continuous integration runs builds and tests when a new commit arrives. Frequent merges make conflicts and failures easier to trace than a large, late merge.

The demo moves a commit through three checks and stops at a failed gate. A green pipeline alone does not prove that the artifact is ready for every deployment environment.

When to use

Use it when several people change one codebase and need feedback for each commit.

Open as page ↗