Knative Build
1️⃣ Knative Build 개요 (CI/CD 파이프라인과의 통합)
Knative Build는 컨테이너 이미지 빌드 및 배포 자동화를 위한 기능으로, CI/CD 파이프라인과 긴밀하게 통합될 수 있습니다.
현재 Knative Build는 Tekton 프로젝트로 발전하여 더 강력한 빌드 기능을 제공합니다.
✅ Knative Build의 주요 기능
- 소스 코드 → 컨테이너 이미지 자동화
- CI/CD 파이프라인과 통합 (Tekton, Jenkins 등)
- YAML 기반 선언적 빌드 파이프라인
- Git, Docker, Kubernetes와 원활한 연동
💡 Knative Build 아키텍처 개요
2️⃣ BuildTemplates (사용자 정의 빌드 템플릿 설정)
BuildTemplate은 반복적으로 사용할 빌드 작업을 정의하는 템플릿입니다.
각 빌드는 BuildTemplate을 기반으로 실행되며, Docker, Buildpacks, Kaniko 등을 사용할 수 있습니다.
1. Docker를 활용한 BuildTemplate 예제
apiVersion: build.knative.dev/v1alpha1
kind: BuildTemplate
metadata:
name: docker-build
spec:
steps:
- name: build
image: gcr.io/kaniko-project/executor
args:
- "--dockerfile=/workspace/Dockerfile"
- "--context=/workspace/"
- "--destination=gcr.io/my-project/my-app"
kaniko
를 사용하여 Docker 이미지를 빌드하고, Google Container Registry(GCR)에 배포.
3️⃣ Build Pipelines (자동화된 빌드 파이프라인 구성)
Build Pipeline은 여러 개의 빌드 단계를 연결하여 자동화된 파이프라인을 구성하는 기능입니다.
현재 Knative Build 대신 Tekton을 사용하여 더욱 강력한 빌드 파이프라인을 구성할 수 있습니다.
1. Tekton Pipeline을 활용한 예제
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: build-and-deploy
spec:
tasks:
- name: fetch-source
taskRef:
name: git-clone
params:
- name: url
value: "https://github.com/my-org/my-repo.git"
- name: build-image
taskRef:
name: buildah
params:
- name: IMAGE
value: "quay.io/my-repo/my-app"
- name: deploy
taskRef:
name: kubectl-apply
params:
- name: manifest
value: "k8s/deployment.yaml"
git-clone
→buildah
→kubectl-apply
순서로 빌드 및 배포 진행.
4️⃣ Build Triggers (변경 사항에 대한 자동 빌드 실행)
Build Triggers는 코드 변경 사항이 발생했을 때 자동으로 빌드를 실행하는 기능입니다.
GitHub Webhook, Tekton Trigger 등을 활용하여 자동화를 구현할 수 있습니다.
1. Tekton Triggers를 활용한 자동 빌드 예제
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: github-binding
spec:
params:
- name: gitrevision
value: "$(body.head_commit.id)"
- name: gitrepositoryurl
value: "$(body.repository.clone_url)"
- GitHub에서
push
이벤트가 발생하면 자동으로 빌드를 실행.
5️⃣ 자동 컨테이너 빌드 및 배포
Knative Build (Tekton)를 사용하면 소스 코드 변경 시 자동으로 컨테이너 이미지를 빌드하고 Kubernetes에 배포할 수 있습니다.
1. Tekton Task를 활용한 자동 빌드 및 배포
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: build-and-push
spec:
steps:
- name: build
image: gcr.io/kaniko-project/executor
script: |
#!/bin/sh
/kaniko/executor --dockerfile=/workspace/Dockerfile \
--context=/workspace/ \
--destination=gcr.io/my-project/my-app
- name: deploy
image: bitnami/kubectl
script: |
#!/bin/sh
kubectl apply -f k8s/deployment.yaml
- Kaniko를 사용하여 컨테이너 이미지 빌드 후,
kubectl apply
로 배포.
6️⃣ BuildStatus (빌드 상태 및 로그 모니터링)
빌드가 진행되는 동안 상태 및 로그를 확인할 수 있습니다.
Tekton에서는 tkn
CLI를 활용하여 빌드 상태를 모니터링할 수 있습니다.
1. 빌드 상태 확인 명령어
tkn pipeline logs -f -n my-namespace
2. 특정 Task의 로그 확인
tkn taskrun logs build-and-push -f -n my-namespace
7️⃣ 외부 빌드 시스템과의 통합 (Jenkins, Tekton)
Knative Build는 Jenkins, Tekton 등 외부 빌드 시스템과 연동하여 CI/CD를 구성할 수 있습니다.
1. Jenkins와 Knative 연동 예제
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: jenkins-service
spec:
template:
spec:
containers:
- image: jenkins/jenkins:lts
- Jenkins를 Knative Service로 배포하여 CI/CD 환경 구성 가능.
2. Tekton과 Knative 연동 예제
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: tekton-service
spec:
template:
spec:
containers:
- image: gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller
- Tekton 컨트롤러를 Knative에서 실행하여 빌드 파이프라인 자동화.