Erstellen von CI-Pipelines mit Tekton (innerhalb von Kubernetes). Teil 1/2

In diesem Artikel erstellen wir eine Continuous Integration (CI) -Pipeline mit Tekton , einem Open Source-Framework zum Erstellen von CI / CD-Pipelines in Kubernetes.







Wir werden einen lokalen Kubernetes-Cluster über kind bereitstellen und Tekton darauf installieren. Danach erstellen wir eine zweistufige Pipeline, in der Unit-Tests der Anwendung ausgeführt, ein Docker-Image erstellt und an DockerHub gesendet werden.







Dies ist Teil 1 von 2, in dem wir Tekton installieren und eine Aufgabe erstellen, die einen Test unserer Anwendung ausführt. Der zweite Teil ist hier verfügbar .







Erstellen eines k8s-Clusters



Wir verwenden kind , um einen Kubernetes-Cluster für unsere Tekton-Installation zu erstellen:







$ kind create cluster --name tekton
      
      





Tekton installieren



Wir können Tekton mithilfe der Datei release.yaml aus dem neuesten Tektoncd / Pipeline- Repository auf GitHub installieren :







$ kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.20.1/release.yaml
      
      





Tekton tekton-pipelines. , , .







$ kubectl get pods --namespace tekton-pipelines
NAME                                           READY   STATUS    RESTARTS   AGE
tekton-pipelines-controller-74848c44df-m42gf   1/1     Running   0          20s
tekton-pipelines-webhook-6f764dc8bf-zq44s      1/1     Running   0          19s
      
      





Tekton CLI



, , , kubectl, Tekton. , , .







Homebrew:







$ brew tap tektoncd/tools
$ brew install tektoncd/tools/tektoncd-cli

$ tkn version
Client version: 0.16.0
Pipeline version: v0.20.1
      
      







Tekton (CRD) Kubernetes, . :







  • : , ( CircleCI Job).







  • : ( CircleCI Workflow)







  • PipelineResource: Pipeline (, git tar)









:







  • TaskRun



    :
  • PipelineRun



    :


, , TaskRun



. : PipelineRun



.









Pipeline Go, . , Dockerfile src/



.









git. 01-task-test.yaml :







apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: test
spec:
  resources:
    inputs:
      - name: repo
        type: git
  steps:
    - name: run-test
      image: golang:1.14-alpine
      workingDir: /workspace/repo/src
      command: ["go"]
      args: ["test"]
      
      





resources: , . ( run-test) git tekton , PipelineResource.







02-pipelineresource.yaml:







apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: arthurk-tekton-example
spec:
  type: git
  params:
    - name: url
      value: https://github.com/arthurk/tekton-example
    - name: revision
      value: master
      
      





git git /workspace/$input_name



. repo, /workspace/repo



. foobar, /workspace/foobar



.







(steps:



) Docker, . golang Docker, Go .







go test . /workspace/repo



, tekton Go src



. , : /workspace/repo/src



.







(go test



), , (go



) args (test



) YAML.







Task PipelineResource kubectl:







$ kubectl apply -f 01-task-test.yaml
task.tekton.dev/test created

$ kubectl apply -f 02-pipelineresource.yaml
pipelineresource.tekton.dev/arthurk-tekton-example created
      
      







, TaskRun



, (PipelineResource



).







03-taskrun.yaml :







apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: testrun
spec:
  taskRef:
    name: test
  resources:
    inputs:
      - name: repo
        resourceRef:
          name: arthurk-tekton-example
      
      





(taskRef



— test) git tekton-example (resourceRef



PipelineResource



arthurk-tekton-example



) .







kubectl, Pods TaskRun. Pod Init:0/2



PodInitializing



, :







$ kubectl apply -f 03-taskrun.yaml
pipelineresource.tekton.dev/arthurk-tekton-example created

$ kubectl get pods
NAME                READY   STATUS      RESTARTS   AGE
testrun-pod-pds5z   0/2     Completed   0          4m27s

$ kubectl get taskrun
NAME      SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
testrun   True        Succeeded   70s         57s
      
      





, . testrun-pod-pds5z



( ).







$ kubectl logs testrun-pod-pds5z --all-containers
{"level":"info","ts":1588477119.3692405,"caller":"git/git.go:136","msg":"Successfully cloned https://github.com/arthurk/tekton-example @ 301aeaa8f7fa6ec01218ba6c5ddf9095b24d5d98 (grafted, HEAD, origin/master) in path /workspace/repo"}
{"level":"info","ts":1588477119.4230678,"caller":"git/git.go:177","msg":"Successfully initialized and updated submodules in path /workspace/repo"}
PASS
ok      _/workspace/repo/src    0.003s
      
      





, . Tekton CLI, , .







Tekton CLI



Tekton CLI .







, TaskRun, , ( test), TaskRun ( ) :







$ tkn task start test --inputresource repo=arthurk-tekton-example --showlog
Taskrun started: test-run-8t46m
Waiting for logs to be available...
[git-source-arthurk-tekton-example-dqjfb] {"level":"info","ts":1588477372.740875,"caller":"git/git.go:136","msg":"Successfully cloned https://github.com/arthurk/tekton-example @ 301aeaa8f7fa6ec01218ba6c5ddf9095b24d5d98 (grafted, HEAD, origin/master) in path /workspace/repo"}
[git-source-arthurk-tekton-example-dqjfb] {"level":"info","ts":1588477372.7954974,"caller":"git/git.go:177","msg":"Successfully initialized and updated submodules in path /workspace/repo"}

[run-test] PASS
[run-test] ok   _/workspace/repo/src    0.006s
      
      







Tekton Kubernetes, , TaskRun YAML, Tekton CLI tkn.







Der gesamte Beispielcode ist hier verfügbar .







Im nächsten Teil werden wir eine Aufgabe erstellen, die Kaniko verwendet , um ein Docker-Image für unsere Anwendung zu erstellen und es dann an DockerHub zu senden. Anschließend erstellen wir eine Pipeline, in der beide Aufgaben nacheinander ausgeführt werden (Anwendungstests ausführen, erstellen und senden).







Teil 2 ist hier verfügbar .








All Articles