Tanzu Java BuildpackでSnykのテストを有効化する
Tanzu Java Buildpackには様々な3rd Party連携が入っており、その中にSnykを使ったテストができる。
はじめに
Tanzu Java BuildpackとはVMwareがサポートする商用Cloud Native Buildpacksです。
このBuildpacksには、様々な3rd Party連携をできるBuildpackが同梱されています。 まだ情報が少ないのですが、この一部はサポートされているようです。 今回はこの中で、以下を有効にする方法を調べました。
1tanzu-buildpacks/snyk
読み物
情報が少ないのですが、以下の情報参考にしました。
https://docs.pivotal.io/tanzu-buildpacks/release-notes/tanzu-snyk-release-notes.html
https://docs.pivotal.io/build-service/1-1/managing-images.html#service-bindings
この中で、KpackのServiceBindingsという方法を使うことで、違うBuildpackを呼び出すことができるようです。
環境
Tanzu Build Service 1.1.1
試す
以下クィックに試します。
Imageリソースを生成
以下のようなYamlファイルを作成します。なおtag
に入る値は環境によって異なるので設定を変えてください。
1apiVersion: kpack.io/v1alpha1
2kind: Image
3metadata:
4 name: spring-petclinic-snyk
5spec:
6 builder:
7 kind: ClusterBuilder
8 name: default
9 source:
10 git:
11 revision: main
12 url: https://github.com/spring-projects/spring-petclinic
13 tag: <REPO>/<LIBRARY>/<IMAGE>
14 bindings:
15 - name: snyk
16 metadataRef:
17 name: snyk
18 secretRef:
19 name: snyk-secret
20---
21apiVersion: v1
22kind: Secret
23metadata:
24 name: snyk-secret
25type: Opaque
26stringData:
27 org-name: YYYYY
28 api-token: XXXXXXXXXXXXXXXXXX
29 api-url: https://snyk.io/api
30---
31apiVersion: v1
32kind: ConfigMap
33metadata:
34 name: snyk
35data:
36 kind: snyk
37 provider: snyk
以下の値は、snykのアカウント情報にアップデートしてください。
1stringData:
2 org-name: YYYYY
3 api-token: XXXXXXXXXXXXXXXXXX
4 api-url: https://snyk.io/api
なお、このYamlのポイントはBindingsを定義していることと、ConfigMap側でkind: snyk
を定義していることです。こうすることで、ビルド時にsnykのbuildpackが追加で呼び出されるようになります。
適用
そして上のYamlファイルを適用します。
1kubectl apply -f <Yaml名> -n <Namespace名>
以上です。あとは動作を確認します。
動作確認
しばらくすると、いかのようにエラーになったJobが出現します。
1kubectl get po -n petclinic-build
2NAME READY STATUS RESTARTS AGE
3spring-petclinic-snyk-build-1-mcbn6-build-pod 0/1 Init:Error 0 21m
エラーなので、意味がないとおもわれるかもしれないですが、ここでログを確認します。 まずDetectフェーズをみると、たしかにSnykのbuildpackが追加されています。
1# kubectl logs spring-petclinic-snyk-build-1-mcbn6-build-pod -n petclinic-build -c detect
28 of 33 buildpacks participating
3paketo-buildpacks/ca-certificates 2.0.0
4tanzu-buildpacks/snyk 3.0.0 <<<< ここ!!
5paketo-buildpacks/bellsoft-liberica 7.0.0
6paketo-buildpacks/maven 4.0.0
7paketo-buildpacks/executable-jar 4.0.0
8paketo-buildpacks/apache-tomcat 4.2.0
9paketo-buildpacks/dist-zip 3.0.0
10paketo-buildpacks/spring-boot 4.0.0
さらにBuildフェーズをみると、エラーになった原因がSnykのテスト結果によるものとわかりました。
1# kubectl logs spring-petclinic-snyk-build-1-mcbn6-build-pod -n petclinic-build -c build
2
3Paketo CA Certificates Buildpack 2.0.0
4 https://github.com/paketo-buildpacks/ca-certificates
5 Launch Helper: Reusing cached layer
6
7Tanzu Snyk Buildpack 3.0.0
8 https://github.com/pivotal-cf/tanzu-snyk
9 Build Configuration:
10 $BP_SNYK_BREAK_BUILD true whether to fail build when issues are found
11 $BP_SNYK_SEVERITY_THRESHOLD low the lowest severity of issues to display and use to determine build breakage
12Testing...
13
14Tanzu Snyk Buildpack 3.0.0
15 unable to test
16 could not download https://snyk.io/api/v1/test/maven?org=machih: 403
17ERROR: failed to build: exit status 1
いったんは正しく期待したBuildpackが呼び出せているところまでは確認できました。
なお、このエラーですが、調べたところ、Snykの無料アカウントだと、APIアクセスがないため発生しているようです。なのでSnykの有料アカウントを取得する必要があるようです。とりあえず、現段階ではあきらめます。
まとめ
Tanzu Java Buildpackから3rd Party連携は簡単に呼び出すことができます。 ただし、結果にあるとおり、実際にはテストになっていないので、もう少し詳細がわかったら方法を掲載します。今回はとりあえず、動いたレベルの紹介となります。