お試しSpinnaker on GCP

# お題
以下をやってみただけ。本当にそれだけ。
https://cloud.google.com/docs/ci-cd/spinnaker/spinnaker-for-gcp
及び
https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja

# 対象者
GCP使ってて、GKEで管理させたいサービスもある。
試しに[Spinnaker](https://spinnaker.io/)使ってCD(継続的デリバリー)したいんだけど、自前で用意するの大変そう。
と思っている人。

# 前提

- GCPプロジェクト作成済み。

# 実践

## Spinnaker on Google Cloud Platform をインストール

以下を見つつ、やってみる。
https://cloud.google.com/docs/ci-cd/spinnaker/spinnaker-for-gcp

### Cloud Shell Editorを開くところまで

以下にアクセス
https://console.cloud.google.com/kubernetes/application?_ga=2.220373085.418580277.1607004980-1541468982.1603807794
![screenshot-console.cloud.google.com-2020.12.03-23_25_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/828b0794-7f8a-e9d3-e154-f6ad2ca4fdeb.png)

「SPINNAKER FOR GOOGLE CLOUD PLATFORM に移動」ボタン押下

![screenshot-shell.cloud.google.com-2020.12.03-23_27_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/f60e9432-6725-f75f-f590-557fb1d82616.png)

「続行」ボタン押下

![screenshot-shell.cloud.google.com-2020.12.03-23_27_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/c0cfd393-b344-7d8a-38e1-fafe769793c6.png)

「確認」ボタン押下

![screenshot-shell.cloud.google.com-2020.12.03-23_27_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/2496f715-920f-2669-1b21-3f2f8ee9e047.png)

待機。。。

![screenshot-shell.cloud.google.com-2020.12.03-23_48_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/12e8e5d1-59ce-a4dc-2ca1-d240492789e8.png)

### チュートリアルをオープン

```
XXXXXX@cloudshell:~/cloudshell_open/spinnaker-for-gcp/scripts/install$ cloudshell launch-tutorial provision-spinnaker.md
```

### チュートリアルに従い、Spinnaker on GCP をインストール

![screenshot-shell.cloud.google.com-2020.12.03-23_46_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/5cc09905-cfe1-7ce4-a379-6ade9b2c8909.png)

画面右下の「開始」ボタン押下

![screenshot-shell.cloud.google.com-2020.12.03-23_51_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/ee5d4852-70bc-b49f-2547-7add77ed51a4.png)

書かれるがまま、コマンドを適宜Cloud Shellに打ち込んでいく。
ちなみに、最後のスクリプト実行に 10 分以上かかるかもと書いてあったけど、たしかに、けっこうな時間がかかった。。。
ようやく↓が表示された。
![screenshot-shell.cloud.google.com-2020.12.04-00_15_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/e0c59695-bfcd-8f46-4d72-2aedb884ec65.png)

続いて、ステップ２

![screenshot-shell.cloud.google.com-2020.12.04-00_17_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/7fce14a8-2174-0535-4fb0-0123ca6016de.png)

プレビューしてみる。

![screenshot-shell.cloud.google.com-2020.12.04-00_20_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/51dc9d6f-e77d-f257-3861-15e8f511f5c1.png)

![screenshot-8080-e727a755-9e96-4aa8-8656-fe02c89268ba.asia-east1.cloudshell.dev-2020.12.04-00_21_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/eaba4599-9766-575b-0dc0-5dfd99c7fa88.png)

![screenshot-8080-e727a755-9e96-4aa8-8656-fe02c89268ba.asia-east1.cloudshell.dev-2020.12.04-00_22_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/7b60a2a0-3f0e-ed05-8642-fa1e90dec4db.png)

おー、Spinnakerだ。

はい、で、最後のステップ。

![screenshot-shell.cloud.google.com-2020.12.04-00_33_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/3f32fdd9-6141-01e7-d46d-5f8ffc28bff6.png)

OAuthの設定をしろとあるので。

![screenshot-console.developers.google.com-2020.12.04-00_36_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/fd74deda-6a85-13b1-6eb4-34b1bbb9870a.png)

次は、OAuthクライアントIDの作成。

![screenshot-console.developers.google.com-2020.12.04-00_40_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/f52cd79c-5d1a-69c9-e543-a478fe6cd722.png)

アプリケーションの種類は「ウェブアプリケーション」を選択するらしい。

![screenshot-console.developers.google.com-2020.12.04-00_42_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/ed8b259b-2458-3b0f-3708-e6c91047d7cb.png)

「作成」ボタン押下

![screenshot-console.developers.google.com-2020.12.04-00_43_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/003499b6-90f1-8a01-d2d5-f3aa80114faf.png)

「クライアントID」と「クライアントシークレット」はコピーしておく。
チュートリアル記載の最後のコマンドを叩いたら、やはり、けっこうな時間をかけた後、先ほどの認証情報ページで承認済みのリダイレクトURIに追加すべきURIがコンソールに出力されるので、↓のように追加。

![screenshot-console.developers.google.com-2020.12.04-00_54_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/ff53feea-9be1-ea93-8422-628d854ba57b.png)

ただ、なんだかこのあたり、コマンド実行が終わってからも１時間くらい完了までに時間がかかるらしいので、待つ。

さて、１時間（実際には待ちくたびれて一晩寝かせたけど）待ち、チュートリアルに記載されていたリンク（※）からSpinnakerを開く。

※

```
Conclusion
Connect to your Spinnaker installation here.
```

![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.05-00_55_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/fb1f598a-d6e1-0a8d-d49a-a88169b94a0a.png)

はい、表示された。
ちょっと前に「`ポート 8080 でプレビュー`」にて表示されたサイトと同じ。
だけど、これは、指定のGoogleアカウントでログインした状態でのみ見れるよう認証がかかった状態。
試しに別のPC（スマホとかでもいい）で（指定のGoogleアカウントで未ログイン状態）アクセスしてみても、サイトは開かない。

### Spinnakerの管理

以下の手順。
https://cloud.google.com/docs/ci-cd/spinnaker/spinnaker-for-gcp#manage_spinnaker

GKEからSpinnakerアプリを開き、Cloud Shellにて接続。

![screenshot-console.cloud.google.com-2020.12.04-22_07_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/7709a4ca-940b-a01b-b4b4-8060f21d67ac.png)

`spinnaker-1` リンク押下で、「次のステップ」として、いろいろやれることが載っている。

![screenshot-console.cloud.google.com-2020.12.05-00_06_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/cd0e2937-7d9a-60fd-6dfb-6516d82e89aa.png)

とりあえず、Spinnakerが使える状態になったので、まずはここまで。

## 継続的デリバリーパイプラインを作成

以下を見つつ、やってみる。
https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja

まあ、Spinnakerを使えるようにするところまでは既にやってるので、厳密には↓から。
https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#create_a_cluster_for_application_deployments

### サンプルアプリ用のGKEクラスタ作成

Cloud Shell使って以下を叩き込む。

```
ZONE=us-east1-c
gcloud config set compute/zone $ZONE
gcloud container clusters create app-cluster \
--machine-type=n1-standard-2
```

怒られた。

![screenshot-shell.cloud.google.com-2020.12.05-00_33_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/3d676f6c-eca3-3da8-407e-7b0520a9e425.png)

使うGCPプロジェクトをセットしてなかった。
書かれた通り、プロジェクトIDをセットすると、今度はうまくいった。

![screenshot-shell.cloud.google.com-2020.12.05-00_38_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/7889efe9-ec51-e1ca-3b84-e1b46f6e41e5.png)

`app-cluster` が出来てる。

![screenshot-console.cloud.google.com-2020.12.05-00_41_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/7faa352e-9265-29b8-734f-a536e20a26a8.png)

### GKEクラスタをSpinnakerに追加

以下を叩いて、聞かれたことに答えていく（基本はデフォでいいはず）だけ。

```
~/cloudshell_open/spinnaker-for-gcp/scripts/manage/add_gke_account.sh
```

あとは以下２つ。

```
kubectl config use-context gke_${DEVSHELL_PROJECT_ID}_${ZONE}_spinnaker-1
```

```
~/cloudshell_open/spinnaker-for-gcp/scripts/manage/push_and_apply.sh
```

Spinnakerを覗いてみると、いつの間にやらアプリケーションがいっぱい出来ている。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.05-00_54_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/c5d9244f-2462-c9b7-bc75-9811598f6f11.png)


### Dockerイメージのビルド

#### ソースコード リポジトリを作成

これも、記事に書かれている通りにひたすら打ち込む。
https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#create_your_source_code_repository

```
cd ~
wget https://gke-spinnaker.storage.googleapis.com/sample-app-v4.tgz
```

```
tar xzfv sample-app-v4.tgz
```

```
cd sample-app
```

```
git init
git add .
git commit -m "Initial commit"
```

```
gcloud source repos create sample-app
git config credential.helper gcloud.sh
```

```
export PROJECT=$(gcloud info --format='value(config.project)')
git remote add origin https://source.developers.google.com/p/$PROJECT/r/sample-app
```

```
git push origin master
```

Cloud Source Repositories に入った様子。
![screenshot-source.cloud.google.com-2020.12.05-01_01_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/a35326f5-8644-7cda-d7ba-b83fa62cf42c.png)

#### ビルドトリガーを構成

https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#configure_your_build_triggers

Versionを振ったGitタグをCloud Source RepositoriesにpushすることをトリガーにDockerイメージのビルドとContainer Registryへのpushが行われるようにする。

まずは、Cloud Buildにトリガーを仕込む。
![screenshot-console.cloud.google.com-2020.12.05-12_01_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/1e611287-7a52-bac1-8692-c64fb6b58185.png)
![screenshot-console.cloud.google.com-2020.12.05-12_01_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/c454d2d3-4604-578f-0ed1-6218d1d41b55.png)

出来た。
![screenshot-console.cloud.google.com-2020.12.05-12_04_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/c1afdeef-38ef-a06e-3e6a-f59c869cf319.png)

#### Spinnaker で使用するために Kubernetes マニフェストを準備

これも、記事に書かれている通りにひたすら打ち込む。
https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#prepare_your_kubernetes_manifests_for_use_in_spinnaker

```
export PROJECT=$(gcloud info --format='value(config.project)')
gsutil mb gs://$PROJECT-kubernetes-manifests
```

バケットが出来た。
![screenshot-console.cloud.google.com-2020.12.05-12_14_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/871f0b5e-d69a-5d61-3c69-76a80d9f4f8e.png)


```
gsutil versioning set on gs://$PROJECT-kubernetes-manifests
```

```
sed -i s/PROJECT/$PROJECT/g k8s/deployments/*
```

```
git commit -a -m "Set project ID"
```

これで、CIの部分は終わりかな。

### デプロイメント パイプラインの構成

https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#configuring_your_deployment_pipelines

#### パイプライン作成

やはり以下に従ってポチポチ。
https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#create_the_deployment_pipeline

```
spin application save --application-name sample \
                      --owner-email example@example.com \
                      --cloud-providers kubernetes \
                      --gate-endpoint http://localhost:8080/gate
```

実は今回の手順で言うと、上記のまま叩くと以下のように怒られる。
![screenshot-shell.cloud.google.com-2020.12.05-12_29_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/ca7ca9aa-c36a-7768-a290-b1e44d09b1aa.png)

ローカルの8080ポートで開くやり方からIAP使ったインターネット公開に変えてるので。
なので、エンドポイントを直して叩く。

```
spin application save --application-name sample \
                      --owner-email example@example.com \
                      --cloud-providers kubernetes \
                      --gate-endpoint https://spinnaker-1.endpoints.[GCPプロジェクトID].cloud.goog/gate
```

すると、アプリケーション作成に成功。
![screenshot-shell.cloud.google.com-2020.12.05-12_39_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/519bef4b-9fa4-0820-b7ef-99e97a143da9.png)

コマンド実行からちょっとタイムラグはあった（ブラウザリロードが必要だった？）けど、出来てる。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.05-12_42_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/e333c2dc-488b-f7bd-1108-5f6fdf597b41.png)

```
export PROJECT=$(gcloud info --format='value(config.project)')
sed s/PROJECT/$PROJECT/g spinnaker/pipeline-deploy.json > pipeline.json
spin pipeline save --gate-endpoint https://spinnaker-1.endpoints.[GCPプロジェクトID].cloud.goog/gate -f pipeline.json
```

↑も、さり気なくエンドポイントを直してる。
エンドポイントは直したのだけど、でも、怒られた。
![screenshot-shell.cloud.google.com-2020.12.05-12_50_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/a3aff171-3bce-5226-22c8-520ec2c6e40e.png)

`pipeline.json`を開いてみると、たしかにエラー内容の通り、３行分、キー重複してた。
とりあえず、重複してるキーを削除してリトライ。
今度は成功。
![screenshot-shell.cloud.google.com-2020.12.05-12_57_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/f2c3c803-af09-b15f-cbf4-7bc4f8a8cc59.png)

パイプラインが出来ている。よね？（`Deploy`という名前で作ったのか。）
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.05-13_02_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/12e24041-c72f-3b9c-09bb-9b18117eb28c.png)

まあ、履歴的にも成功してるし。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.05-13_00_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/bf68437f-6ad1-f372-b9bf-0a55f0d3e969.png)

#### イメージをビルド

https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#build_your_image

```
git tag v1.0.0
git push --tags
```

Versionタグをpushしたので、Cloud Buildに仕込んだトリガーが発動して、ビルド中。
![screenshot-console.cloud.google.com-2020.12.05-13_07_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/180518f3-50cc-ed94-c395-1b5fa5ca8114.png)

#### パイプラインの実行を表示

https://cloud.google.com/solutions/continuous-delivery-spinnaker-kubernetes-engine?hl=ja#view_your_pipeline_execution

見てみる。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.05-13_13_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/cefff613-6c1d-acb2-23b6-14b3c9ac1f41.png)

失敗しておるし・・・。
BackendとFrontendそれぞれ同じ理由で失敗している様子。
う〜ん、自分で作ったサンプルアプリでないから、初見でピンと来ない・・・。
とりあえず、Yamlが怪しいので見てみる。。

```
$ vim k8s/deployments/sample-backend-canary.yaml
```

```yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: sample-backend-canary
spec:
  replicas: 1
  template:
    metadata:
      name: backend
      labels:
        app: sample
        role: backend
        env: canary
    spec:
      containers:
      - name: backend
        image: gcr.io/[GCPプロジェクトID]/sample-app
        resources:
          limits:
            memory: "500Mi"
            cpu: "100m"
        imagePullPolicy: Always
        readinessProbe:
          httpGet:
            path: /health
            port: 8080
        env:
        - name: COMPONENT
          value: backend
        - name: VERSION
          value: canary
        ports:
        - name: backend
          containerPort: 8080
```

あ〜、これかな。
https://github.com/kubernetes/kubernetes/blob/release-1.16/CHANGELOG/CHANGELOG-1.16.md#deprecations-and-removals
k8sの`v1.16`以降だと`extensions/v1beta1`のAPIは使えない？
たしかに、GKEクラスタのバージョンは 1.16.15 になってる。（このバージョンがk8sのバージョンを表してるのでいいんだっけ・・・？）
![screenshot-console.cloud.google.com-2020.12.05-13_33_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/bef0424a-4449-8e90-b3ff-3b91e9d73bd7.png)

で、`apps/v1` を使えと書いてあるのでYamlを直してリトライ。

```
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   k8s/deployments/sample-backend-canary.yaml
        modified:   k8s/deployments/sample-backend-production.yaml
        modified:   k8s/deployments/sample-frontend-canary.yaml
        modified:   k8s/deployments/sample-frontend-production.yaml
```

以下、修正箇所の抜粋。

```yaml
 kind: Deployment
-apiVersion: extensions/v1beta1
+apiVersion: apps/v1
```

リポジトリに反映。

```
$ git add k8s/
$
$ git commit -m "fix apiVersion"
$
$ git push origin master
$
$ git tag -l
v1.0.0
$
$ git tag v1.0.0
fatal: tag 'v1.0.0' already exists
$
$ git tag -d v1.0.0
Deleted tag 'v1.0.0' (was 6d93856)
$
$ git push origin :v1.0.0
To https://source.developers.google.com/p/[GCPプロジェクトID]/r/sample-app
 - [deleted]         v1.0.0
$
$ git tag v1.0.0
$
$ git tag -l
v1.0.0
$
$ git push --tags
Total 0 (delta 0), reused 0 (delta 0)
To https://source.developers.google.com/p/[GCPプロジェクトID]/r/sample-app
 * [new tag]         v1.0.0 -> v1.0.0
```

はい、再びCloud Buildでビルドが走り出した。
![screenshot-console.cloud.google.com-2020.12.05-22_10_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/fedc31ac-0cb0-e516-c307-cd7949278cb2.png)

今度は大丈夫かな。

![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.05-22_14_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/bcfff759-d4a2-38b6-02d1-633e59afd880.png)

ダメでした。。。
あ〜、Yamlに `selector` が無いぞと。。。
apiVersionは直したけど、それだけじゃなくて修正後のAPIに合わせた要素を用意しないとダメか。。。

単に記事通りにことを進めてというのを試したいだけだったので、だんだん面倒になってきた。。。
が、今回の件で「へ〜、deployment書く際のAPI、v1beta1じゃなくなったんだ！」という（k8sの進化についていけてない）発見があったので、なんとか気を取り直してもう少し頑張ってみる。

以下を参考に、 `selector` （だけじゃないけど）を追加してみた。
https://kubernetes.io/ja/docs/concepts/workloads/controllers/deployment/

以下、修正ファイルの１事例。

```
$ git diff sample-backend-canary.yaml
diff --git a/k8s/deployments/sample-backend-canary.yaml b/k8s/deployments/sample-backend-canary.yaml
index 7a4a0e4..b3a64e7 100644
--- a/k8s/deployments/sample-backend-canary.yaml
+++ b/k8s/deployments/sample-backend-canary.yaml
@@ -1,9 +1,14 @@
-kind: Deployment
 apiVersion: apps/v1
+kind: Deployment
 metadata:
   name: sample-backend-canary
+  labels:
+    app: sample
 spec:
   replicas: 1
+  selector:
+    matchLabels:
+      app: sample
   template:
     metadata:
       name: backend
```

さあ、今度はどうだ？

```
$ git add k8s/
$
$ git commit -m "add selector"
[master 2100afb] add selector
 4 files changed, 24 insertions(+), 4 deletions(-)
$
$ git push origin master
Enumerating objects: 14, done.
Counting objects: 100% (14/14), done.
Delta compression using up to 4 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 782 bytes | 782.00 KiB/s, done.
Total 8 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5)
To https://source.developers.google.com/p/[GCPプロジェクトID]/r/sample-app
   aaf49d9..2100afb  master -> master
$
$ git tag -d v1.0.0
Deleted tag 'v1.0.0' (was aaf49d9)
$
$ git push origin :v1.0.0
To https://source.developers.google.com/p/[GCPプロジェクトID]/r/sample-app
 - [deleted]         v1.0.0
$
$ git tag v1.0.0
$
$ git tag -l
v1.0.0
$
$ git push --tags
Total 0 (delta 0), reused 0 (delta 0)
To https://source.developers.google.com/p/[GCPプロジェクトID]/r/sample-app
 * [new tag]         v1.0.0 -> v1.0.0
```

Spinnaker上も、先ほどのように即座に失敗していない。いけるか。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.06-00_01_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/2080ec48-9f1b-7abe-bd47-d8cf43c7d3cc.png)

やった、`Canary`の方のデプロイ完了。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.06-00_05_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/19b682ba-da6c-c314-5af7-25359ebe84c8.png)

で、真ん中の「`Deploy to Production?`」で手動承認の待ち状態となっているので承認すると、いよいよプロダクションへのデプロイが始まる。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.06-00_12_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/e7475150-2332-3c6e-96e2-1ca37192a952.png)

ややあって、プロダクションへのデプロイも完了。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.06-00_15_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/a6358020-4645-c7ef-b672-1edf85ea71e9.png)

`INFRASTRUCTURE`->`LOAD BALANCERS`の動線から、デプロイした各サービス（CanaryとProductionそれぞれのBackendとFrontend）が確認できる。
あと、Productionの方のFrontendで「`DEFAULT`」をクリックすると、
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.06-00_18_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/63018c26-d8df-c873-f769-42f589bf4928.png)

接続可能なIngressのIPが表示されるのでクリップボードにコピーする。
![screenshot-spinnaker-1.endpoints.calcium-pod-297514.cloud.goog-2020.12.06-00_26_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/321c625e-8b01-fc5c-7c49-e7d5ec408727.png)

ブラウザで表示すると、こんな感じ。
![screenshot-35.231.199.122-2020.12.06-00_29_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180599/4a2268d1-55e5-c609-6e58-952968341a19.png)

# まとめ
ただ記事に書かれている通りにやっただけではあるけど、けっこう時間がかかった。
かかったけど、、こんなポチポチやってるだけでSpinnaker使ったCI/CD環境が出来上がるとは。。。
（いや、もちろん、本当はSpinnakerの仕組みとかも含め、コマンド１つ１つ何が起きてるのかちゃんと理解はしてかないとダメなわけではあるけれど。）
そう思えば、楽・・・なのかな。