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連携は簡単に呼び出すことができます。 ただし、結果にあるとおり、実際にはテストになっていないので、もう少し詳細がわかったら方法を掲載します。今回はとりあえず、動いたレベルの紹介となります。