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

スポンサーリンク

はじめに

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

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

【KubernetesでCI/CD】Tekton動かしてみる
はじめに簡単な例を使って、Tekton Pipelineを動かしてみたいと思います。Tektonについては下記を参考にしてください。また、Tekton Pipeline使うまでの準備も紹介しています。本記事では、Tekton Pip...
Cloud Native Buildpacksについてざっくり理解する
はじめに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の超基本的なことについては下記を参照してください。...

それぞれの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.

用意するファイルは下記の通りです。

.
├── buildpacks.yaml
├── git-clone.yaml
├── pipeline.yaml
├── pipelinerun.yaml
├── serviceaccount.yaml
└── volume.yaml

Secretの作成

Docker Hubにプッシュするときに必要な認証情報を持つSecretを作成します。

kubectl create secret docker-registry docker-registry \
                    --docker-server=https://index.docker.io/v1/ \
                    --docker-username=<DockerHubのアカウント名> \
                    --docker-password=<DockerHubのパスワード> \
                    --docker-email=<DockerHubのメールアドレス>

ServiceAccountの作成

先ほどのSecretを利用するServiceAccountを作成します(serviceaccount.yaml)。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: buildpacks-service-account
secrets:
- name: docker-user-pass
kubectl apply -f serviceaccount.yaml

PVとPVCの作成

アプリのソースコードを配置するworkspaceのためのPersistentVolumeを作成します(volume.yaml)。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: buildpacks-source-pv
spec:
  capacity:
    storage: 500Mi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: /tmp
    type: Directory
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: buildpacks-source-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi
kubectl apply -f volume.yaml

git-clone Taskの作成

git-clone TaskはCatalogから下記を利用します。

catalog/git-clone.yaml at main · tektoncd/catalog
Catalog of shared Tasks and Pipelines. Contribute to tektoncd/catalog development by creating an account on GitHub.
kubectl apply -f git-clone.yaml

buildpacks Taskの作成

buildpacks TaskはCatalogから下記を利用します。

catalog/buildpacks.yaml at main · tektoncd/catalog
Catalog of shared Tasks and Pipelines. Contribute to tektoncd/catalog development by creating an account on GitHub.
kubectl apply -f buildpacks.yaml

Pipelineの作成

Pipelineを作成します(pipeline.yaml)。

git-clone Taskでソースコードをクローンし、buildpacks Taskでビルドし、最後に結果を表示するPipelineになります。

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: buildpacks-pipeline
spec:
  params:
  - name: image
    type: string
    description: image URL to push
  workspaces:
  - name: source-workspace
  tasks:
  - name: fetch-repository # ソースコードをクローン
    taskRef:
      name: git-clone
    workspaces:
    - name: output
      workspace: source-workspace
    params:
    - name: url
      value: https://github.com/paketo-buildpacks/samples
  - name: build # Cloud Native Buildpacksでビルド
    taskRef:
      name: buildpacks
    runAfter:
    - fetch-repository
    workspaces:
    - name: source
      workspace: source-workspace
    params:
    - name: APP_IMAGE
      value: "$(params.image)"
    - name: SOURCE_SUBPATH
      value: "java/gradle"
    - name: BUILDER_IMAGE
      value: paketobuildpacks/builder:base
  - name: display-results # 結果を表示
    runAfter:
    - build
    taskSpec:
      steps:
      - name: print
        image: docker.io/library/bash:[email protected]:b208215a4655538be652b2769d82e576bc4d0a2bb132144c060efc5be8c3f5d6
        script: |
          #!/usr/bin/env bash
          set -e
          echo "Digest of created app image: $(params.DIGEST)"
      params:
      - name: DIGEST
    params:
    - name: DIGEST
      value: $(tasks.build.results.APP_IMAGE_DIGEST)
kubectl apply -f pipeline.yaml

PipelineRunの作成

Pipelineを実行するためのPipelineRunを作成します(pipelinerun.yaml)。

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: buildpacks-pipeline-run
spec:
  serviceAccountName: buildpacks-service-account
  pipelineRef:
    name: buildpacks-pipeline
  workspaces:
  - name: source-workspace
    subPath: source
    persistentVolumeClaim:
      claimName: buildpacks-source-pvc
  params:
  - name: image
    value: monda00/sample-gradle # イメージをpushするリポジトリ
kubectl apply -f pipelinerun.yaml

実行結果の確認

PipelineRunのログを確認すると、buildpackでビルドしていることが確認できます。

❯ tkn pr logs

...

[build : create]       monda00/sample-gradle

[build : results] sha256:5a17548e20d92eabe51f71b287b5ab7c809b18ad5705965e16952ffe919a1b3bmonda00/sample-gradle

[display-results : print] Digest of created app image: sha256:5a17548e20d92eabe51f71b287b5ab7c809b18ad5705965e16952ffe919a1b3b

参考

タイトルとURLをコピーしました