Tekton(Kubernetes内)を使用したCIパイプラインの作成。パート1/2

この記事では、KubernetesでCI / CDパイプラインを構築するためのオープンソースフレームワークであるTektonを使用して、継続的インテグレーション(CI)パイプライン構築します。







種類介してローカルのKubernetesクラスターをプロビジョニングし、それにTektonをインストールします。その後、アプリケーションの単体テストを実行し、Dockerイメージを構築して、DockerHubにプッシュする2段階のパイプラインを作成します。







これはパート1/2で、Tektonをインストールし、アプリケーションのテストを実行するタスクを作成します。2番目の部分はここにあります







k8sクラスターの作成



kindを使用して、Tektonインストール用のKubernetesクラスターを作成します。







$ kind create cluster --name tekton
      
      





Tektonのインストール



GitHubの最新のtektoncd /パイプラインリポジトリからrelease.yamlファイルを使用してTektonをインストールできます。







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







すべてのサンプルコードはこちらから入手できます







次の部分では、使用するタスクを作成しようとしているKanikoを我々のアプリケーションのためのドッカーイメージを構築し、その後DockerHubに提出することを。次に、両方のタスク(アプリケーションテストの実行、ビルド、送信)を順番に実行するパイプラインを作成します。







パート2はこちらから入手できます








All Articles