【Tekton】tekton-lintでTektonの静的解析をする
はじめに
Tektonのlinterであるtekton-lint
についてざっくり紹介したいと思います。
tekton-lint
tekton-lint
は、Tektonの静的解析ツールです。
GitHub - IBM/tekton-lint: Linter for Tekton definitions.
Linter for Tekton definitions. Contribute to IBM/tekton-lint development by creating an account on GitHub.
下記のようにtekton-lint
コマンドで静的解析可能です。
1tekton-lint [file path]
TaskやPipelinの未定義などのエラーから、使っていないパラメータの検知などのベストプラクティスの解析までしてくれます。
GitHub - IBM/tekton-lint: Linter for Tekton definitions.
Linter for Tekton definitions. Contribute to IBM/tekton-lint development by creating an account on GitHub.
インストール
インストールにはnode
が必要です。
1npm install -g tekton-lint
設定
tekton-lint
では、コマンドを実行するディレクトリに.tektonlintrc.yaml
を作成することで解析内容の設定が可能です。
それぞれのルールに関してerror
、warning
、off
が選択可能です。
下記がデフォルトの設定になります。
1---
2rules: # error | warning | off
3 no-duplicate-param: error
4 no-invalid-name: error
5 no-invalid-param-type: error
6 no-pipeline-missing-parameters: error
7 no-pipeline-missing-task: error
8 no-pipeline-task-cycle: error
9 no-extra-param: error
10 no-missing-workspace: error
11 no-undefined-result: error
12 no-missing-param: error
13 no-duplicate-resource: error
14 no-resourceversion: error
15 no-duplicate-env: error
16 no-undefined-volume: error
17 no-latest-image: warning
18 prefer-beta: warning
19 prefer-kebab-case: warning
20 no-unused-param: warning
21 no-missing-resource: error
22 no-undefined-param: error
23 prefer-when-expression: warning
24 no-deprecated-resource: warning
25 no-missing-hashbang: warning
tekton-lint/.tektonlintrc.yaml at main · IBM/tekton-lint
Linter for Tekton definitions. Contribute to IBM/tekton-lint development by creating an account on GitHub.
使ってみる
シンプルなPipelineとTaskで試してみます。
作成するファイルは下記の3つです。
1.
2├── hello-pipeline.yml
3├── hello-pipelineRun.yml
4└── hello-task.yml
それぞれの内容は下記の通りです。
1apiVersion: tekton.dev/v1beta1
2kind: PipelineRun
3metadata:
4 generateName: hello-run-
5spec:
6 params:
7 - name: test-param
8 value: "foo"
9 pipelineRef:
10 name: hello-pipeline
1apiVersion: tekton.dev/v1beta1
2kind: Pipeline
3metadata:
4 name: hello-pipeline
5spec:
6 params:
7 - name: test-param
8 default: "hoge"
9 tasks:
10 - name: hello
11 taskRef:
12 name: hello-task
13 - name: goodbye
14 taskRef:
15 name: goodbye-task
1apiVersion: tekton.dev/v1beta1
2kind: Task
3metadata:
4 name: hello-task
5spec:
6 steps:
7 - name: hello
8 image: ubuntu
9 command:
10 - echo
11 args:
12 - "Hello World!"
tekton-lint
を実行してみます。
--format=stylish
というオプションをつけたほうが見やすいので、オプション付きで実行します。
1❯ tekton-lint * --format=stylish
2
3hello-task.yml
4 8:14 warning Invalid image: 'ubuntu'. Specify the image tag instead of using ':latest' no-latest-image
5
6hello-pipeline.yml
7 15:15 error Pipeline 'hello-pipeline' references task 'goodbye-task' but the referenced task cannot be found. To fix this, include all the task definitions to the lint task for this pipeline no-missing-resource
8 7:7 warning Pipeline 'hello-pipeline' defines parameter 'test-param', but it's not used anywhere in the spec no-unused-param
9
10✖ 3 problems (1 error, 2 warnings)
どのファイルの、どこで、何を、検知したかが出力されています。
検知された問題は下記の3つです。
- イメージのタグが指定されていない
- 定義されていないTaskを使っている
- 未使用のパラメーターが存在する