tekton
- kubernetes-native하고 service를 잘게 나누면서(microservice) 이를 container 환경에서 돌리는 cloud-native한 CI/CD tool입니다.
- Kubernetes의 권장사항에 맞게 Custom Resource Definition(CRD)로 작성되어 있어 재사용성이 높고 customizing이 가능합니다.
- tekton hub에서 이미 사용되고 있는 많은 pipeline들을 가져와 사용할 수 있습니다.
- pipeline에서 각 task는 kubernetes cluster 내의 pod로 돌아가므로 병렬처리가 가능합니다.
- kubernetes는 auto scaling을 지원하기 때문에 tekton 또한 필요에 따라 처리량을 늘릴 수 있습니다.
- argocd와 달리 CI까지 가능합니다.
Jenkins vs Tekton
| Jenkins | Tekton | |:———|:————————–| | Pipeline | Pipeline and PipelineRun | | Stage | Task | | Step | A step in a task |
Components
- Step: CI/CD workflow에서 작업의 최소 단위입니다. container에서 실행됩니다.
- Task: 일련의 Step들의 모임입니다. kubernetes pod에서 실행됩니다. Task 내의 Step들은 하나의 작은 workspace를 공유합니다.
Pipeline: 일반적으로 application을 CI/CD Tool을 통해 배포하는 일련의 단계를 통합하여 pipeline이라 칭하며, tekton에서는 task들의 모임이라 할 수 있습니다. Task들은 하나의 persistent volume을 workspace로 공유합니다.
- TaskRun: Task는 TaskRun을 통해 수행됩니다. Class와 Instance의 관계와 같다고 이해했습니다.
- PipelineRun: 작성된 Pipeline은 PipelineRun을 통해 수행됩니다.
tekton 작동 방식
tekton pipeline은 일련의 step으로 이루어져 있으며, 각 step은 독립적인 container 환경 안에서 실행됩니다. pipeline은 step 단계에서 command를 실행시키기 위해 필요한 file인 entrypoint binary
를 include합니다. 이 과정에서 variables, volume mounting 또는 다른 필요한 설정들이 준비됩니다. tekton은 pipeline의 resource를 만들 때, kubernetes annotations을 추가 또는 수정하고 이를 통해 상태를 추적할 수 있습니다. 예를 들어, entrypoint binary
는 연속적인 step을 실행할 때 해당 step의 annotation이 complete 상태로 변할 때까지 대기하였다가 다음 step을 실행합니다. tekton은 다른 CI/CD 도구와 마찬가지로 어떤 step의 출력을 다른 step의 입력으로 활용할 수 있습니다.
tekton trigger
tekton pipeline을 자동화하기 위해서는 tekton trigger를 설치해야만 합니다. 예를 들어, git repository에 새로운 코드가 push 되면 trigger는 git repository를 감시하고 있다가 새로운 이벤트가 발생하면 해당 이벤트를 처리합니다.
trigger는 다음과 같은 component로 이루어져 있습니다.
- EventListener: 이벤트 발생 시 외부에서 보내는 신호를 받습니다.
- TriggerTemplate: TriggerTemplate을 통해 PipelineRun을 구성합니다.
- TriggerBinding: 이벤트 발생 시 PipelineRun에 이벤트에서 보내는 parameter를 전달합니다.
참고