【Tekton】Cloud Native Buildpacksでビルドする
はじめに
TektonでCloud Native Buildpacksを使ってビルドをしてみます。
TektonとCloud Native Buildpacksの基本的なことについては下記を参照してください。
【KubernetesでCI/CD】Tekton動かしてみる
はじめに 簡単な例を使って、Tekton Pipelineを動かしてみたいと思います。 Tek
Cloud Native Buildpacksについてざっくり理解する
はじめに Cloud Native Buildpacksについてざっくり解説し、実際に使ってどん
TektonでCloud Native Buildpacks
TektonでCloud Native Buildpacksを使う場合、下記2つのCatalogが用意されています。
- buildpacks:
creator
を実行してイメージを作成するTask(公式はこちらをおすすめしている) - buildpacks-phases: lifecycleの各フェーズを1つずつ実行するTask
Lifecycleについては下記を参考にしてください。
【Cloud Native Buildpacks】Lifecycleとは
はじめに Cloud Native Buildpacksのコンポーネントから、**Lifecyc
それぞれのTaskではいくつかのバージョンがあり、それぞれにREADMEに必要なパラメータなどが説明されています。
Gradleアプリをビルドしてみる
Paketo Buildpacksが用意しているGradleのサンプルアプリを使って、ビルドしてDocker HubにプッシュするPipelineを作成してみます。
samples/java/gradle at main · paketo-buildpacks/samples
A collection of samples. Contribute to paketo-buildpacks/samples development by creating an account on GitHub.
用意するファイルは下記の通りです。
1.
2├── buildpacks.yaml
3├── git-clone.yaml
4├── pipeline.yaml
5├── pipelinerun.yaml
6├── serviceaccount.yaml
7└── volume.yaml
Secretの作成
Docker Hubにプッシュするときに必要な認証情報を持つSecretを作成します。
1kubectl create secret docker-registry docker-registry \
2 --docker-server=https://index.docker.io/v1/ \
3 --docker-username=<DockerHubのアカウント名> \
4 --docker-password=<DockerHubのパスワード> \
5 --docker-email=<DockerHubのメールアドレス>
ServiceAccountの作成
先ほどのSecretを利用するServiceAccountを作成します(serviceaccount.yaml
)。
1apiVersion: v1
2kind: ServiceAccount
3metadata:
4 name: buildpacks-service-account
5secrets:
6- name: docker-user-pass
1kubectl apply -f serviceaccount.yaml
PVとPVCの作成
アプリのソースコードを配置するworkspaceのためのPersistentVolumeを作成します(volume.yaml
)。
1apiVersion: v1
2kind: PersistentVolume
3metadata:
4 name: buildpacks-source-pv
5spec:
6 capacity:
7 storage: 500Mi
8 accessModes:
9 - ReadWriteOnce
10 hostPath:
11 path: /tmp
12 type: Directory
13---
14apiVersion: v1
15kind: PersistentVolumeClaim
16metadata:
17 name: buildpacks-source-pvc
18spec:
19 accessModes:
20 - ReadWriteOnce
21 resources:
22 requests:
23 storage: 500Mi
1kubectl apply -f volume.yaml
git-clone Taskの作成
git-clone TaskはCatalogから下記を利用します。
catalog/task/git-clone/0.7/git-clone.yaml at main · tektoncd/catalog
Catalog of shared Tasks and Pipelines. Contribute to tektoncd/catalog development by creating an account on GitHub.
1kubectl apply -f git-clone.yaml
buildpacks Taskの作成
buildpacks TaskはCatalogから下記を利用します。
catalog/task/buildpacks/0.5/buildpacks.yaml at main · tektoncd/catalog
Catalog of shared Tasks and Pipelines. Contribute to tektoncd/catalog development by creating an account on GitHub.
1kubectl apply -f buildpacks.yaml
Pipelineの作成
Pipelineを作成します(pipeline.yaml
)。
git-clone Taskでソースコードをクローンし、buildpacks Taskでビルドし、最後に結果を表示するPipelineになります。
1apiVersion: tekton.dev/v1beta1
2kind: Pipeline
3metadata:
4 name: buildpacks-pipeline
5spec:
6 params:
7 - name: image
8 type: string
9 description: image URL to push
10 workspaces:
11 - name: source-workspace
12 tasks:
13 - name: fetch-repository # ソースコードをクローン
14 taskRef:
15 name: git-clone
16 workspaces:
17 - name: output
18 workspace: source-workspace
19 params:
20 - name: url
21 value: https://github.com/paketo-buildpacks/samples
22 - name: build # Cloud Native Buildpacksでビルド
23 taskRef:
24 name: buildpacks
25 runAfter:
26 - fetch-repository
27 workspaces:
28 - name: source
29 workspace: source-workspace
30 params:
31 - name: APP_IMAGE
32 value: "$(params.image)"
33 - name: SOURCE_SUBPATH
34 value: "java/gradle"
35 - name: BUILDER_IMAGE
36 value: paketobuildpacks/builder:base
37 - name: display-results # 結果を表示
38 runAfter:
39 - build
40 taskSpec:
41 steps:
42 - name: print
43 image: docker.io/library/bash:5.1.4@sha256:b208215a4655538be652b2769d82e576bc4d0a2bb132144c060efc5be8c3f5d6
44 script: |
45 #!/usr/bin/env bash
46 set -e
47 echo "Digest of created app image: $(params.DIGEST)"
48 params:
49 - name: DIGEST
50 params:
51 - name: DIGEST
52 value: $(tasks.build.results.APP_IMAGE_DIGEST)
1kubectl apply -f pipeline.yaml
PipelineRunの作成
Pipelineを実行するためのPipelineRunを作成します(pipelinerun.yaml
)。
1apiVersion: tekton.dev/v1beta1
2kind: PipelineRun
3metadata:
4 name: buildpacks-pipeline-run
5spec:
6 serviceAccountName: buildpacks-service-account
7 pipelineRef:
8 name: buildpacks-pipeline
9 workspaces:
10 - name: source-workspace
11 subPath: source
12 persistentVolumeClaim:
13 claimName: buildpacks-source-pvc
14 params:
15 - name: image
16 value: monda00/sample-gradle # イメージをpushするリポジトリ
1kubectl apply -f pipelinerun.yaml
実行結果の確認
PipelineRunのログを確認すると、buildpackでビルドしていることが確認できます。
1❯ tkn pr logs
2
3...
4
5[build : create] monda00/sample-gradle
6
7[build : results] sha256:5a17548e20d92eabe51f71b287b5ab7c809b18ad5705965e16952ffe919a1b3bmonda00/sample-gradle
8
9[display-results : print] Digest of created app image: sha256:5a17548e20d92eabe51f71b287b5ab7c809b18ad5705965e16952ffe919a1b3b
参考
- Tekton · Cloud Native Buildpacks
- catalog/task/buildpacks at main · tektoncd/catalog
- catalog/task/buildpacks-phases at main · tektoncd/catalog