するとSpinnaker上ではとpipelineができており、もちろん宣言的に書いたので一切いじれないパイプラインができています。あとはGCRにイメージがpushされて、パイプラインが実行されるといういつも通りです。まとめアプリケーション(Rails、Golang,Node.jsなど)を更新すると、.spinnaker/config.ymlを定義するだけで宣言的パイプラインで実行することができる。(注)宣言的Spinnakerの設定ファイルである.spinnaker/config.ymlなどのパスは任意です。Notificationを設定しているので、以下のような通知が来るようになります。思う方が要ると思いますが、こちらも対応しています。具体的にはtemplateがmergeされるとpipelineそのものを新テンプレートで更新しなおす、ということをします。試しに変数を追加してmergeします。今回は以下のようなnewVariablesForDemoという変数を追加しました。CircleCI以下のようなWorkflowになっています。最初にtestジョブが走って、これ自体はpipeline-template自体をバリデーションしています。テストが完了すると、publishジョブが実行されテンプレートが更新されます。次に古いバージョンのテンプレートを使用しているものを新しく更新しないといけません。これを担うのはsyncです。APIを通してアプリケーション側のWorkflowのSpinnakerのPipelineをビルドしなおし、新しいテンプレートを用いてパイプラインをデプロイしなおします。するとアプリケーション側でまたビルドが走っているのです。これによって最新テンプレートがすぐ反映されることになります。確認用にGUIからtemplateを利用してみるとと新しいtemplateができていることがわかります。merge時とアプリで使っているテンプレートが異なるということは、カオスな環境をうむので即座に反映させようと思いました。まとめ別repositoryで管理しているtemplate自体もうまくすればアプリケーション側と連携を取ることができ、すぐ反映することができます。これによってテンプレート自体も、エンジニアにフィードバックをもたらすことができます。フィードバックサーバーサイドエンジニアなどでも容易に「どのようなパイプラインでデプロイされたのか」や「カナリアデプロイがなんで失敗したか」などを知ることができます。Buildをサポートしました。これによって、よりパイプラインや、DCDを含むアプリケーションがデプロイしやすくなります。Buildサポートされました(まだPreviewですが)🥳同じブランチで複数のジョブが走った場合、古いジョブを自動でキャンセルしてくれる機能です。これを使うとコミットが多いプロジェクトでもビルド使用量を節約することができます。prod、devクラスタなど複数のクラスタがあるときに使用できるの?もちろん使用可能です。想定としてはymlにて宣言的にデプロイ先のクラスタを定義することになります。keke-prodこれだけでは使うことができなく、あらかじめhalyardにて設定を読み込む必要があります。この部分が参考になるかもしれません。Spinnaker内のapplicationのユースケースは?Spinnakerにはapplicationだけではなくて、projectなどの一見どのように使うのかわからない概念があります。僕自身のチーム運用でのベストプラクティス以下の通りです。プロダクトを束ねる組織で分ける(例として、部署、小さい規模の会社など)。プロダクトに紐づくように分ける。これに対してはベストプラクティスがなく、チームのコンセンサスを取りながら進めていくのがいいのかもしれません。最後にこれまでは宣言的継続的デリバリー(DCD)を実現すると理論的にはハッピーと周知されているものの、どのようすればよいのかが明白ではなかったです。Spinnakerやkubernetesなどが登場し、継続的デリバリーが容易にできるようになった今、それを宣言的にするというパラダイムが到来することは自明でした。今回挑戦してみて、CircleCIやTravis、JenkinsなどのCI手法を参考にしつつ、かなりよいDCDを考えつくことができたのではないかと思っています。コメントやコメントなど質問・雑談・感想お待ちしています。私は新卒としてとある会社のエンジニアになったわけですが...2018-12-23Concourseで継続的デリバリー。...2018-12-14CircleCIでSpinnakerのデプロイメントパイプラインをデプロイするどうも、もうすぐ大学卒業の@timtimtim1026です。»プロフィール学生エンジニア。忘れてしまうので備忘録です。flaskでServerlessにホストするTelepresence概論スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。