コンテンツにスキップ

skaffold.yaml@Skaffold

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01 Skaffoldの仕組み

アーキテクチャ

記入中...


パイプライン構成

▼ ステージの種類

CI/CDパイプラインのステップをステージと呼ぶ。

build/test/deployステージに加えて、継続的な開発に役立つステージを持つ。

ただし、Skaffoldは基本的には開発環境でしか使わないため、ユースケースが限定的なステージもある。

skaffold-pipeline

▼ 各ステージのツールの選択

Skaffoldの各ステージでは、それ専用のツールをコールできる。

skaffold-pipeline_tools


02. buildステージ

buildステージとは

コンテナイメージのビルド方法を定義する。


artifacts

▼ image

ビルドされるイメージの名前を設定する。

build:
  artifacts:
    - image: foo-app
    - image: foo-web
    - image: bar-app
    - image: bar-web

▼ context

マイクロサービスのルートまでのパスを設定する。

build:
  artifacts:
    - image: foo-app
      context: ./src/foo
    - image: foo-web
      context: ./src/foo
    - image: bar-app
      context: ./src/bar
    - image: bar-web
      context: ./src/bar

▼ docker

項目 説明 補足
dockerfile マイクロサービスのルートからDockerfileまでのパスを設定する。 https://skaffold.dev/docs/references/yaml/#build-artifacts-docker-dockerfile
target ビルドするイメージのステージを設定する。 https://skaffold.dev/docs/references/yaml/#build-artifacts-docker-target
build:
  artifacts:
    - image: foo-app
      context: ./src/foo
      docker:
        dockerfile: ./docker/app/Dockerfile
    - image: foo-web
      context: ./src/foo
      docker:
        dockerfile: ./docker/web/Dockerfile
        target: development
    - image: bar-app
      context: ./src/bar
      docker:
        dockerfile: ./docker/app/Dockerfile
    - image: bar-web
      context: ./src/bar
      docker:
        dockerfile: ./docker/web/Dockerfile
        target: development


local

▼ push

ビルドしたコンテナイメージをリポジトリにプッシュするか否かを設定する。

Skaffoldは基本的には開発環境でしか使わないため、これは無効化しておいた方が良い。

build:
  local:
    push: "false"

▼ useBuildkit

BuildKit機能の有効化を設定する。

BuildKitではイメージレイヤーが並列的に作成されるため、ビルド時間を従来よりも短縮できる。

build:
  local:
    useBuildkit: "false"


tagPolicy

▼ gitCommit

コミットIDをバージョンタグとして設定する。

build:
  tagPolicy:
    gitCommit: {}

▼ sha256

sha256ハッシュ値とlatestタグをバージョンタグとして設定する。

build:
  tagPolicy:
    sha256: {}


03. portForwardステージ

skaffold runコマンド時に、同時にポートフォワーディングを実行する。

すでにポート番号が使用中だった場合は、+1されたポート番号が自動的に使用される。

portForward:
  - resourceType: pod
    resourceName: foo-mysql-pod-0
    localPort: 3308
    port: 3306
  - resourceType: pod
    resourceName: bar-mysql-pod-0
    localPort: 3309
    port: 3306


04. testステージ

testステージとは

Kubernetesリソースのテスト方法を定義する。


structureTests

ファイルを指定し、コンテナストラクチャテストを実施する。

test:
  - image: <イメージリポジトリURL> # <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/<イメージリポジトリ名>:latest
    structureTests:
      - ./structure-tests/foo.yaml
schemaVersion: 2.0.0

# イメージにファイルが存在するか否かを検証する。
fileExistenceTests:
  - name: PHP file
    path: /var/www/public/index.php
    shouldExist: "true"


05. deployステージ

deployステージとは

Kubernetesリソースのデプロイ手法を定義する。


kubectl

▼ kubectlとは

kubectlコマンドを使用して、Kubernetesリソースをデプロイする。

ワイルドカード (*) を使用できる。

deploy:
  kubectl:
    manifests:
      - ./release/dev/kubernetes.yaml
      - ./**/**/**.yaml # ワイルドカードを使用できる。


helm

▼ helm

Helmを使用して、Kubernetesリソースをデプロイする。

deploy:
  helm:
    releases:
      - name: <Helmリリース名>
        artifactOverrides:
          image: <コンテナイメージ名> # buildステージのartifactsのコンテナイメージ名と合わせる。
        imageStrategy:
          helm: {}