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