Tekton을 사용하여 Kubernetes에서 첫 번째 CI/CD 파이프라인 작성
Tekton은 CI/CD(지속적 통합 및 지속적 전달) 시스템을 생성하기 위한 Kubernetes 기반 오픈 소스 프레임워크입니다.
Tekton은 CI/CD(지속적 통합 및 지속적 전달) 시스템을 생성하기 위한 Kubernetes 기반 오픈 소스 프레임워크입니다. 또한 기본 구현 세부 정보를 추상화하여 여러 클라우드 공급자 또는 온프레미스 시스템 전반에 걸쳐 엔드투엔드(빌드, 테스트, 배포) 애플리케이션 개발을 수행하는 데 도움이 됩니다.
텍톤 소개
처음에는 Knative Build로 알려진 Tekton은 나중에 자체 거버넌스 조직을 갖춘 자체 오픈소스 프로젝트로 재구성되었으며 현재는 Linux Foundation 프로젝트입니다. Tekton은 클러스터 내 컨테이너 이미지 빌드 및 배포 워크플로, 즉 CI(지속적 통합) 및 CD(지속적 전달) 서비스를 제공합니다. 이는 Tekton Pipelines와 Tekton CLI, 트리거 및 카탈로그와 같은 여러 지원 구성 요소로 구성됩니다.
Tekton은 Kubernetes 기본 애플리케이션입니다. 이는 Kubernetes 클러스터에 확장으로 설치 및 실행되며 파이프라인에 대해 생성하고 재사용할 수 있는 빌딩 블록을 정의하는 Kubernetes 사용자 정의 리소스 세트로 구성됩니다. K-native 기술이기 때문에 Tekton은 확장이 매우 쉽습니다. 워크로드를 늘려야 하는 경우 클러스터에 노드를 추가하기만 하면 됩니다. 또한 확장 가능한 디자인과 기여된 구성 요소의 커뮤니티 저장소 덕분에 쉽게 사용자 정의할 수 있습니다.
Tekton은 작업을 수행하기 위해 CI/CD 시스템이 필요한 개발자와 조직의 개발자를 위한 CI/CD 시스템을 구축하는 플랫폼 엔지니어에게 이상적입니다.
Tekton 구성요소
CI/CD 파이프라인 구축은 광범위한 노력이므로 Tekton은 모든 단계에 필요한 도구를 제공합니다. Tekton으로 얻을 수 있는 주요 구성 요소는 다음과 같습니다.
- 파이프라인: 파이프라인은 CI/CD 파이프라인을 조립하는 데 사용하는 구성 요소 역할을 하는 Kubernetes 맞춤 리소스 집합을 정의합니다.
- 트리거: 트리거는 이벤트 페이로드에서 추출된 정보를 기반으로 파이프라인을 생성할 수 있는 Kubernetes 맞춤 리소스입니다. 예를 들어 Git 리포지토리에 대해 병합 요청이 열릴 때마다 파이프라인의 인스턴스화 및 실행을 트리거할 수 있습니다.
- CLI: CLI는 터미널에서 Tekton과 상호작용할 수 있는
tkn이라는 명령줄 인터페이스를 제공합니다. - 대시보드: 대시보드는 파이프라인 실행에 대한 정보를 표시하는 Tekton 파이프라인용 웹 기반 그래픽 인터페이스입니다.
- 카탈로그: 카탈로그는 자체 파이프라인에서 사용할 수 있는 고품질 커뮤니티 기부 Tekton 구성 요소(작업, 파이프라인 등)의 저장소입니다.
- 허브: 허브는 Tekton 카탈로그에 액세스하기 위한 웹 기반 그래픽 인터페이스입니다.
- Operator: Operator는 Kubernetes 클러스터에서 Tekton 프로젝트를 설치, 업데이트, 업그레이드, 제거할 수 있는 Kubernetes Operator 패턴입니다.
- 체인: 체인은 Tekton에서 공급망 보안을 관리할 수 있는 Kubernetes 사용자 정의 리소스 정의(CRD) 컨트롤러입니다. 현재 작업이 진행 중입니다.
- 결과: 결과의 목표는 사용자가 CI/CD 워크로드 기록을 논리적으로 그룹화하고 파이프라인 컨트롤러에서 장기 결과 저장소를 분리하는 데 도움이 되는 것입니다.
텍톤 용어
출처: Tekton 문서
- 단계: 단계는 Python 웹 앱에 대한 일부 단위 테스트 실행 또는 자바 프로그램 컴파일과 같은 CI/CD 워크플로에서 가장 기본적인 항목입니다. Tekton은 제공된 컨테이너 이미지를 사용하여 각 단계를 수행합니다.
- 작업: 작업은 특정 순서로 된 단계의 모음입니다. Tekton은 Kubernetes Pod 형식으로 작업을 실행합니다. 여기서 각 단계는 Pod에서 실행 중인 컨테이너가 됩니다.
파이프라인: 파이프라인은 특정 순서로 된 작업 모음입니다. Tekton은 모든 작업을 수집하여 방향성 비순환 그래프(DAG)로 연결하고 그래프를 순차적으로 실행합니다. 즉, 여러 개의 Kubernetes 포드를 생성하고 각 포드가 원하는 대로 성공적으로 실행되도록 보장합니다.
(출처: Tekton 문서)
- PipelineRun: PipelineRun은 이름에서 알 수 있듯이 파이프라인의 특정 실행입니다.
- TaskRun: TaskRun은 특정 작업 실행입니다. TaskRun은 파이프라인 외부에서 작업을 실행하도록 선택한 경우에도 사용할 수 있으며, 이를 통해 작업의 각 단계 실행에 대한 세부 사항을 볼 수 있습니다.
나만의 CI/CD 파이프라인 만들기
Tekton을 시작하는 가장 쉬운 방법은 자신만의 간단한 파이프라인을 작성하는 것입니다. Kubernetes를 매일 사용한다면 아마도 Tekton 파이프라인이 정의된 방식인 YAML에 익숙할 것입니다. 다음은 코드 저장소를 복제하는 간단한 파이프라인의 예입니다.
먼저 task.yaml이라는 파일을 만들고 즐겨 사용하는 텍스트 편집기에서 엽니다. 이 파일은 수행하려는 단계를 정의합니다. 이 예에서는 리포지토리를 복제하므로 단계 복제의 이름을 지정했습니다. 파일은 일부 환경 변수를 설정한 다음 복제를 수행하기 위한 간단한 셸 스크립트를 제공합니다.
다음은 과제입니다. 단계는 작업에 의해 호출되는 함수로 생각하면 되며, 작업은 단계에 필요한 매개변수와 작업공간을 설정합니다.
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: git-clone
spec:
workspaces:
- name: output
description: The git repo will be cloned onto the volume backing this Workspace.
params:
- name: url
description: Repository URL to clone from.
type: string
- name: revision
description: Revision to checkout. (branch, tag, sha, ref, etc...)
type: string
default: ""
steps:
- name: clone
image: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0"
env:
- name: PARAM_URL
value: $(params.url)
- name: PARAM_REVISION
value: $(params.revision)
- name: WORKSPACE_OUTPUT_PATH
value: $(workspaces.output.path)
script: |
#!/usr/bin/env sh
set -eu
CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}"
/ko-app/git-init \
-url="${PARAM_URL}" \
-revision="${PARAM_REVISION}" \
-path="${CHECKOUT_DIR}"
cd "${CHECKOUT_DIR}"
EXIT_CODE="$?"
if [ "${EXIT_CODE}" != 0 ] ; then
exit "${EXIT_CODE}"
fi
# Verify clone is success by reading readme file.
cat ${CHECKOUT_DIR}/README.mdpipeline.yaml이라는 두 번째 파일을 만들고 즐겨 사용하는 텍스트 편집기에서 엽니다. 이 파일은 작업을 실행하고 처리할 수 있는 작업공간과 같은 중요한 매개변수를 설정하여 파이프라인을 정의합니다.
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: cat-branch-readme
spec:
params:
- name: repo-url
type: string
description: The git repository URL to clone from.
- name: branch-name
type: string
description: The git branch to clone.
workspaces:
- name: shared-data
description: |
This workspace will receive the cloned git repo and be passed
to the next Task for the repo's README.md file to be read.
tasks:
- name: fetch-repo
taskRef:
name: git-clone
workspaces:
- name: output
workspace: shared-data
params:
- name: url
value: $(params.repo-url)
- name: revision
value: $(params.branch-name)마지막으로 pipelinerun.yaml이라는 파일을 만들고 즐겨 사용하는 텍스트 편집기에서 엽니다. 이 파일은 실제로 파이프라인을 실행합니다. 파이프라인에 정의된 매개변수를 호출합니다. 그러면 작업 파일에 정의된 작업이 호출됩니다.
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: git-clone-checking-out-a-branch
spec:
pipelineRef:
name: cat-branch-readme
workspaces:
- name: shared-data
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
params:
- name: repo-url
value: https://github.com/tektoncd/pipeline.git
- name: branch-name
value: release-v0.12.x작업을 별도의 파일로 구성하면 git-clone 작업을 여러 파이프라인에서 재사용할 수 있다는 장점이 있습니다.
예를 들어 파이프라인 프로젝트에 대해 엔드투엔드 테스트를 수행한다고 가정해 보겠습니다. git-clone 작업을 사용하여 테스트해야 하는 코드의 새로운 복사본이 있는지 확인할 수 있습니다.
마무리
Kubernetes에 익숙하다면 Tekton을 시작하는 것은 다른 K 네이티브 애플리케이션을 채택하는 것만큼 쉽습니다. 파이프라인을 생성하고 파이프라인과 인터페이스하는 데 도움이 되는 다양한 도구가 있습니다. 자동화를 좋아한다면 Tekton을 사용해 보세요!

