Pertama lihat Tekton Pipelines

Kubernetes berkembang pesat dari platform orkestrasi Docker menjadi sistem operasi cloud tujuan umum. Berkat operator , Kubernetes pada awalnya dapat mengelola konsep dan proses bisnis tingkat tinggi, yang berarti bahwa Anda tidak lagi mengelola blok modul penyusun, layanan, dan penerapan, tetapi mendeskripsikan hal-hal yang dapat dibuat oleh blok penyusun ini, misalnya , server web, data basis data, penerapan berkelanjutan, manajemen sertifikat, dan banyak lagi.







Saat di-deploy ke cluster Kubernetes, Tekton Pipelines memberikan kemampuan untuk menentukan dan menjalankan tugas build, input dan output dalam bentuk nilai sederhana atau objek kompleks seperti gambar Docker, dan menggabungkan resource tersebut ke dalam pipeline. Resource Kubernetes baru ini dan pengontrol yang mengaturnya menghasilkan platform CI / CD mandiri yang dihosting di cluster Kubernetes.







Dalam posting ini, kita akan melihat pipeline build sederhana yang berjalan di MicroK8S.







Mempersiapkan cluster Kubernetes pengujian



Dalam posting ini, saya menggunakan MicroK8S untuk membuat cluster Kubernetes. MicroK8S berguna di sini karena menawarkan pilihan add-on resmi , salah satunya adalah registry image Docker. Karena pipeline kita membangun image Docker, kita perlu menyimpannya di suatu tempat, dan add-in registry MicroK8S memberi kita fungsionalitas ini dengan satu perintah:







microk8s.enable registry
      
      





Kami juga perlu mengaktifkan pencarian DNS dari cluster MicroK8S. Ini dilakukan dengan mengaktifkan add-on DNS:







microk8s.enable dns
      
      





Memasang Tekton Pipelines



Instalasi Tekton Pipelines dilakukan dengan satu perintah kubectl



(atau microk8s.kubectl



dalam kasus kami):







microk8s.kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
      
      





Kami sekarang dapat membuat sumber daya Tekton di cluster Kubernetes kami.







Tugas "Halo Dunia"



, . , echo



Hello World



, ubuntu



.







YAML helloworldtask.yml



:







apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
  name: echo-hello-world
spec:
  steps:
    - name: echo
      image: ubuntu
      command:
        - echo
      args:
        - "Hello World"
      
      





Kubernetes :







microk8s.kubectl apply -f helloworldtask.yml
      
      





, , - . , Tekton .







YAML helloworldtaskrun.yml



:







apiVersion: tekton.dev/v1alpha1
kind: TaskRun
metadata:
  name: echo-hello-world-task-run
spec:
  taskRef:
    name: echo-hello-world
      
      





Kubernetes :







microk8s.kubectl apply -f helloworldtaskrun.yml
      
      





Docker



hello world, Tekton, Docker. , RandomQuotes.







. .







, , — Git, . , git, URL- , :







apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: randomquotes-git
spec:
  type: git
  params:
    - name: revision
      value: master
    - name: url
      value: https://github.com/OctopusSamples/RandomQuotes-Java.git
      
      





Docker, . MicroK8S, Docker http://registry.container-registry.svc.cluster.local:5000.







image



, Docker, registry.container-registry.svc.cluster.local:5000/randomquotes



:







apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: randomquotes-image
spec:
  type: image
  params:
    - name: url
      value: registry.container-registry.svc.cluster.local:5000/randomquotes
      
      





Docker, Docker .







Docker Docker . Kubernetes Docker, : Docker Docker?







, , Docker CLI , - Docker. , umoci Docker, Kaniko Buildah Docker Docker Podman Docker.







Kaniko Tekton, Docker Docker, Kubernetes. YAML :







apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
  name: build-docker-image-from-git-source
spec:
  inputs:
    resources:
      - name: docker-source
        type: git
    params:
      - name: pathToDockerFile
        type: string
        description: The path to the dockerfile to build
        default: /workspace/docker-source/Dockerfile
      - name: pathToContext
        type: string
        description:
          The build context used by Kaniko
          (https://github.com/GoogleContainerTools/kaniko#kaniko-build-contexts)
        default: /workspace/docker-source
  outputs:
    resources:
      - name: builtImage
        type: image
  steps:
    - name: build-and-push
      image: gcr.io/kaniko-project/executor:v0.17.1
      # specifying DOCKER_CONFIG is required to allow kaniko to detect docker credential
      env:
        - name: "DOCKER_CONFIG"
          value: "/tekton/home/.docker/"
      command:
        - /kaniko/executor
      args:
        - --dockerfile=$(inputs.params.pathToDockerFile)
        - --destination=$(outputs.resources.builtImage.url)
        - --context=$(inputs.params.pathToContext)
      
      





.







, , .







git



:







inputs:
    resources:
      - name: docker-source
        type: git
      
      





image



:







outputs:
  resources:
    - name: builtImage
      type: image
      
      





, , Docker:







spec:
  inputs:
    params:
      - name: pathToDockerFile
        type: string
        description: The path to the dockerfile to build
        default: /workspace/docker-source/Dockerfile
      - name: pathToContext
        type: string
        description:
          The build context used by Kaniko
          (https://github.com/GoogleContainerTools/kaniko#kaniko-build-contexts)
        default: /workspace/docker-source
      
      





, /workspace/docker-source



— , git



, docker-source



, .







, Docker. , gcr.io/kaniko-project/executor:v0.17.1



image, Kaniko:







spec:
  steps:
    - name: build-and-push
      image: gcr.io/kaniko-project/executor:v0.17.1
      # specifying DOCKER_CONFIG is required to allow kaniko to detect docker credential
      env:
        - name: "DOCKER_CONFIG"
          value: "/tekton/home/.docker/"
      command:
        - /kaniko/executor
      args:
        - --dockerfile=$(inputs.params.pathToDockerFile)
        - --destination=$(outputs.resources.builtImage.url)
        - --context=$(inputs.params.pathToContext)
      
      





, . docker-source



randomquotes-git



, builtImage — randomquotes-image



.







:







apiVersion: tekton.dev/v1alpha1
kind: TaskRun
metadata:
  name: build-docker-image-from-git-source-task-run
spec:
  taskRef:
    name: build-docker-image-from-git-source
  inputs:
    resources:
      - name: docker-source
        resourceRef:
          name: randomquotes-git
    params:
      - name: pathToDockerFile
        value: Dockerfile
      - name: pathToContext
        value: /workspace/docker-source
  outputs:
    resources:
      - name: builtImage
        resourceRef:
          name: randomquotes-image
      
      







Tekton . Tekton.







Tekton CLI , kubectl



, MicroK8S microk8s.kubectl



. kubectl



— , MicroK8S kubectl



:







sudo microk8s.kubectl config view --raw > $HOME/.kube/config
      
      





:







tkn taskrun logs build-docker-image-from-git-source-task-run
      
      











Tekton?



Docker, Tekton . Docker, .







Kubernetes . , , ?







, Tekton , . tkn



CLI , kubectl



, . kubectl create -f taskrun.yml



, .







, CI.













, Tekton — . Jenkins X OpenShift Pipelines — , Tekton.









Kubernetes , , , , , . , Kubernetes CI , , Kubernetes.







, Jenkins X OpenShift Pipelines, Tekton . Tekton , , , , .








All Articles