skaffold.yaml@Skaffold¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01 Skaffoldの仕組み¶
アーキテクチャ¶
記入中...
パイプライン構成¶
▼ ステージの種類¶
CI/CDパイプラインのステップをステージと呼ぶ。
build/test/deployステージに加えて、継続的な開発に役立つステージを持つ。
ただし、Skaffoldは基本的には開発環境でしか使用しないため、ユースケースが限定的なステージもある。
▼ 各ステージのツールの選択¶
Skaffoldの各ステージでは、それ専用のツールをコールできる。
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: {}