Premier aperçu des pipelines Tekton

Kubernetes évolue rapidement d'une plate-forme d'orchestration Docker à un système d'exploitation cloud à usage général. Grâce aux opérateurs , Kubernetes est capable de gérer initialement les concepts de haut niveau et les processus métier, ce qui signifie que vous ne gérez plus les blocs de modules de construction, les services et les déploiements, mais décrivez plutôt les choses que ces blocs de construction peuvent créer, par exemple. , serveurs Web, données de bases de données, déploiement continu, gestion des certificats, etc.







Lorsqu'il est déployé sur un cluster Kubernetes, Tekton Pipelines offre la possibilité de définir et d'exécuter des tâches de construction, des entrées et des sorties sous la forme de valeurs simples ou d'objets complexes tels que des images Docker, et de combiner ces ressources dans des pipelines. Ces nouvelles ressources Kubernetes et les contrôleurs qui les régissent aboutissent à une plate-forme CI / CD autonome hébergée sur un cluster Kubernetes.







Dans cet article, nous examinerons un pipeline de construction simple fonctionnant sur MicroK8S.







Préparation d'un cluster Kubernetes de test



Dans cet article, j'utilise MicroK8S pour créer un cluster Kubernetes. MicroK8S est utile ici car il propose une sélection d' add-ons officiels , dont l'un est le registre d'images Docker. Étant donné que notre pipeline crée une image Docker, nous devons l'héberger quelque part, et le complément de registre MicroK8S nous fournit cette fonctionnalité avec une seule commande:







microk8s.enable registry
      
      





Nous devons également activer la recherche DNS à partir du cluster MicroK8S. Cela se fait en activant le module complémentaire DNS:







microk8s.enable dns
      
      





Installation des pipelines Tekton



L'installation de Tekton Pipelines se fait avec une seule commande kubectl



(ou microk8s.kubectl



dans notre cas):







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





Nous pouvons désormais créer des ressources Tekton dans notre cluster Kubernetes.







La tâche "Hello World"



, . , 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