Post

[CI/CD] Tekton vs HyperCloud Integration Config ์™„์ „ ์ •๋ฆฌ

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Tekton๊ณผ HyperCloud Integration Config(IC)์˜ ๊ด€๊ณ„๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด IC๋Š” Tekton์„ ๊ฐ์‹ผ ์ถ”์ƒํ™” ๋ ˆ์ด์–ด(๊ป๋ฐ๊ธฐ)์ด๊ณ , ์‹ค์ œ๋กœ ์ผํ•˜๋Š” ์—”์ง„์€ Tekton์ด๋‹ค. ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ๊ณผ ICโ†”Tekton ๋ณ€ํ™˜, ๊ทธ๋ฆฌ๊ณ  ๋‘˜์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•œ๋‹ค.

ํ•ต์‹ฌ ๊ฒฐ๋ก  โ€” IC๋Š” โ€œ๊ฐ„๋‹จํ•œ ์„ค์ • ๋ฌธ๋ฒ•โ€, CICD Operator๋Š” โ€œIC โ†’ Tekton ๋ฒˆ์—ญ๊ธฐโ€, Tekton์€ โ€œ์‹ค์ œ ์‹คํ–‰ ์—”์ง„โ€œ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” IC๋งŒ ์•Œ๋ฉด ๋˜๊ณ , ๊ทธ ๋’ค์—์„œ Operator๊ฐ€ Tekton ๋ฆฌ์†Œ์Šค๋กœ ๋ณ€ํ™˜ํ•ด ์‹คํ–‰ํ•œ๋‹ค.


1. ์ „์ฒด ๊ณ„์ธต ๊ตฌ์กฐ

flowchart TD
    UI["HyperCloud Console(UI)"] --> IC["Integration Config<br/>(์ถ”์ƒํ™” ๋ฌธ๋ฒ•)"]
    IC --> Op["CICD Operator (0.4.14)<br/>IC โ†’ Tekton ๋ณ€ํ™˜"]
    Op --> Tk["Tekton Pipelines (0.26.0)<br/>์‹ค์ œ ์‹คํ–‰ ์—”์ง„"]
    Tk --> Pods["Kubernetes Pods<br/>(compileยทbuildยทscanยทpush)"]
์ปดํฌ๋„ŒํŠธ์—ญํ• ๋น„์œ 
Integration ConfigํŒŒ์ดํ”„๋ผ์ธ ํ…œํ”Œ๋ฆฟ(๊ฐ„์†Œํ™”)ํ•œ๊ตญ์–ด ๋ ˆ์‹œํ”ผ
CICD OperatorIC โ†’ Tekton ๋ณ€ํ™˜๋ฒˆ์—ญ๊ธฐ
Tekton Pipelines์‹ค์ œ ์‹คํ–‰ ์—”์ง„์ฃผ๋ฐฉ ์žฅ๋น„
KubernetesPod ์‹คํ–‰ ์ธํ”„๋ผ์ฃผ๋ฐฉ ๊ณต๊ฐ„

2. Tekton โ€” ์‹คํ–‰ ์—”์ง„

Kubernetes-native CI/CD ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, Task โ†’ Pipeline โ†’ PipelineRun์˜ 3๊ณ„์ธต์ด ํ•ต์‹ฌ์ด๋‹ค.

๋ฆฌ์†Œ์Šค์—ญํ• 
Task์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž‘์—… ๋‹จ์œ„(steps)
PipelineTask๋“ค์˜ ์ˆœ์„œ ์ •์˜(runAfter)
PipelineRunPipeline ์‹คํ–‰ ์ธ์Šคํ„ด์Šค
1
2
3
4
5
6
7
8
9
# Pipeline: Task ์ˆœ์„œ
kind: Pipeline
spec:
  tasks:
  - name: compile
    taskRef: {name: maven-compile}
  - name: build-image
    taskRef: {name: buildah-build}
    runAfter: [compile]        # compile ์™„๋ฃŒ ํ›„

Tekton์€ Pod ์ƒ์„ฑยท์‹คํ–‰, Workspace/Results๋กœ Task ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ, ์ƒํƒœ ์ถ”์ , ๋กœ๊ทธ ์ˆ˜์ง‘์„ ๋‹ด๋‹นํ•œ๋‹ค.


3. Integration Config โ€” ์ถ”์ƒํ™” ๋ ˆ์ด์–ด

HyperCloud๊ฐ€ Tekton ์œ„์— ์–น์€ ์„ค์ • ๊ฐ„์†Œํ™” ๋„๊ตฌ๋‹ค. Git ์—ฐ๋™ยทํŠธ๋ฆฌ๊ฑฐยทWebhook์„ ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: cicd.tmax.io/v1
kind: IntegrationConfig
spec:
  git:
    type: gitlab
    url: https://gitlab.example.com/myapp.git
  jobs:
    preSubmit:                 # MR ์‹œ
    - {name: test, image: maven:3.8, script: mvn test}
    postSubmit:                # merge ํ›„
    - {name: compile, image: scr-maven-img-aicd, script: /usr/local/s2i/bin/assemble}
    - name: build-image
      image: buildah:v1.23.3
      script: buildah bud -t myapp:latest
      when: [{key: refs, value: refs/heads/main}]
  triggers:
  - type: gitlab
    gitlab: {push: {branch: main}}

๐Ÿ’ก IC๋Š” ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ„์†Œํ™”๋œ ๋ฌธ๋ฒ•์œผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ ์–ธํ•  ๋ฟ, ์‹ค์ œ ์‹คํ–‰์€ Operator๊ฐ€ Tekton์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค ์ด๋ค„์ง„๋‹ค. IC๋Š” โ€œ๋ฌด์—‡์„ ํ• ์ง€โ€, Tekton์€ โ€œ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ• ์ง€โ€๋ฅผ ๋งก๋Š”๋‹ค.


4. CICD Operator โ€” ๋ฒˆ์—ญ๊ธฐ

IC๋ฅผ ๊ฐ์ง€ํ•ด Tekton ๋ฆฌ์†Œ์Šค ์„ธํŠธ(TaskยทPipelineยทTriggerTemplateยทTriggerBindingยทEventListener)๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ  GitLab Webhook์„ ๋“ฑ๋กํ•œ๋‹ค.

1
2
3
# IC ํ•˜๋‚˜๊ฐ€ ๋งŒ๋“ค์–ด๋‚ด๋Š” Tekton ๋ฆฌ์†Œ์Šค๋“ค
kubectl get task,pipeline,triggertemplate,eventlistener -n shg-cicd-aicd
# โ†’ myapp-compile, myapp-build, myapp-pipeline, myapp-trigger, myapp-listener

5. ์ฝ”๋“œ ํ‘ธ์‹œ ์‹คํ–‰ ํ๋ฆ„

flowchart LR
    Push["git push"] --> WH["GitLab Webhook"]
    WH --> EL["EventListener<br/>(Tekton Trigger)"]
    EL --> TT["TriggerTemplate<br/>โ†’ PipelineRun ์ƒ์„ฑ"]
    TT --> PC["Pipeline Controller<br/>Task ์ˆœ์ฐจ ์‹คํ–‰"]
    PC --> P1["compile Pod"] --> P2["build Pod"] --> P3["push Pod"]

๊ฐ Task๋Š” ๋ณ„๋„ Pod์—์„œ ์‹คํ–‰๋˜๊ณ  ์™„๋ฃŒ ํ›„ ์ž๋™ ์‚ญ์ œ๋˜๋ฉฐ, PipelineRun ์ƒํƒœ(Succeeded/Failed)๊ฐ€ Console์— ํ‘œ์‹œ๋œ๋‹ค.


6. IC vs Tekton ์ง์ ‘ ์‚ฌ์šฉ

๋ฐฉ์‹์žฅ์ ๋‹จ์ 
IC(HyperCloud)๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ•ยทUI ๊ด€๋ฆฌยทWebhook ์ž๋™ยทTekton ๋ชฐ๋ผ๋„ ์‚ฌ์šฉHyperCloud ์ „์šฉ(์ด์‹์„ฑโ†“)ยท๊ณ ๊ธ‰ ๋ถ„๊ธฐ ์ œํ•œ
Tekton ์ง์ ‘์™„์ „ํ•œ ์ œ์–ดยท์ด์‹์„ฑยท์ปค๋ฎค๋‹ˆํ‹ฐ Task ์žฌ์‚ฌ์šฉํ•™์Šต ๊ณก์„ โ†‘ยทYAML ๋งŽ์ŒยทWebhook ์ˆ˜๋™

๐Ÿ’ก HyperCloud๊ฐ€ IC๋ฅผ ๋งŒ๋“  ์ด์œ  โ€” Tekton์€ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ K8s ์ „๋ฌธ๊ฐ€์šฉ์ด๋ผ ์ง„์ž… ์žฅ๋ฒฝ์ด ๋†’๋‹ค. IC๋กœ ๊ฐ์‹ธ ๊ฐœ๋ฐœ์ž๋„ ์‰ฝ๊ฒŒ ์“ฐ๊ฒŒ ํ•˜๊ณ , HyperAuthยทHyperRegistryยทConsole๊ณผ ์ž๋™ ์—ฐ๋™ํ–ˆ๋‹ค. ๋‹ค๋งŒ Tmax ์ข…์†์ด๋ผ, ํ‘œ์ค€ํ™”ยทํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ์„ ์œ„ํ•ด GitLab Runner๋กœ ์ „ํ™˜ํ•˜๋Š” ํ๋ฆ„๋„ ์žˆ๋‹ค.


7. ํ™•์ธ ๋ช…๋ น์–ด

1
2
3
4
kubectl get tasks,pipelines,pipelineruns -n shg-cicd-aicd   # IC๊ฐ€ ๋งŒ๋“  ๋ฆฌ์†Œ์Šค
kubectl get ic myapp-ic -n shg-cicd-aicd -o yaml            # IC ์›๋ณธ
tkn pipelinerun logs -f <pr-name> -n shg-cicd-aicd          # ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ
kubectl logs -n cicd-system -l app=cicd-operator -f         # ๋ณ€ํ™˜ ๊ณผ์ •

๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
Tekton vs IC
โ”œโ”€ ๊ด€๊ณ„   IC(๊ป๋ฐ๊ธฐ) โ†’ Operator(๋ฒˆ์—ญ) โ†’ Tekton(์—”์ง„) โ†’ Pod
โ”œโ”€ Tekton Taskโ†’Pipelineโ†’PipelineRun(์‹ค์ œ ์‹คํ–‰)
โ”œโ”€ IC     ๊ฐ„์†Œํ™” ๋ฌธ๋ฒ•(GitยทํŠธ๋ฆฌ๊ฑฐยทWebhook ์ž๋™)
โ””โ”€ ์„ ํƒ   IC(์‰ฌ์›€ยท์ข…์†) vs Tekton(์ œ์–ดยท์ด์‹์„ฑ)
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
ICTekton ์ถ”์ƒํ™” ๋ ˆ์ด์–ด
CICD OperatorIC โ†’ Tekton ๋ณ€ํ™˜๊ธฐ
Tekton์‹ค์ œ ํŒŒ์ดํ”„๋ผ์ธ ์—”์ง„

ํ•ต์‹ฌ์€ IC๋Š” ๊ป๋ฐ๊ธฐ, Tekton์ด ์—”์ง„์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. IC๋กœ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•˜๋˜ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” Tekton์ด ๋Œ์•„๊ฐ„๋‹ค๋Š” ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋ฉด, ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์‹œ ์–ด๋А ๊ณ„์ธต(IC ๋ฌธ๋ฒ• / Operator ๋ณ€ํ™˜ / Tekton ์‹คํ–‰)์„ ๋ด์•ผ ํ• ์ง€ ๋ช…ํ™•ํ•ด์ง„๋‹ค.


๐Ÿ”— ์ฐธ๊ณ 

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.