【Tekton】Cloud Native Buildpacksでビルドする

2022.07.26
2024.03.24
CI/CD
Cloud Native BuildpacksGradleJavaTekton

はじめに

TektonでCloud Native Buildpacksを使ってビルドをしてみます。

TektonとCloud Native Buildpacksの基本的なことについては下記を参照してください。

【KubernetesでCI/CD】Tekton動かしてみる

【KubernetesでCI/CD】Tekton動かしてみる

はじめに 簡単な例を使って、Tekton Pipelineを動かしてみたいと思います。 Tek

Cloud Native Buildpacksについてざっくり理解する

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】Lifecycleとは

はじめに Cloud Native Buildpacksのコンポーネントから、**Lifecyc

それぞれのTaskではいくつかのバージョンがあり、それぞれにREADMEに必要なパラメータなどが説明されています。

Gradleアプリをビルドしてみる

Paketo Buildpacksが用意しているGradleのサンプルアプリを使って、ビルドしてDocker HubにプッシュするPipelineを作成してみます。

samples/java/gradle at main · paketo-buildpacks/samples

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/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/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

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee