Kubernetesgocd動機GoCDって「Go」が一般性の高い言葉が故に、躓いたときに調べるのが面倒だなと思って避けてきました。技術選定をする上で、一度は触っておかければならないと思ったので調査してみます。いくつかの図は、本サイトから引用させていただいています。アジェンダ本記事のアジェンダは以下の通りです。Pipelineを定義するまとめ参考文献GoCDGoCDについて大まかに纏めてみます。目的としては、他のCDツールとの差分マップを頭の中で構築することです。GoCDとは公式サイトは以下の通りです。継続的デリバリーツールと言われても、たくさんあるので選定には何かできるのかを知る必要があります。workflows並列かつ逐次実行でき、依存関係を簡単に定義できることで、早いフィードバックを可能にして、デプロイしたいものをデプロイできます。ファンイン、ファンアウト、どちらも正しく終えられます。artifacts差分によってパイプラインは紐づいており、何がデプロイされるのかが分かります。worksE2Eでワークフローを可視化できることがGoCDの真なる力である。一目で変化をしることができて、何かうまく行かなかったときはそれ自体も見ることができる。timeマニュアルトリガーも用意されているので、手動でも可能です。Production環境へのPushの信頼性を向上して、自立性の高いチームを作ることができます。testsどのデプロイメントパイプラインの一部分も検証をすることができます。テストを実行することができて、GoCDのAgentは並行、およびクロスプラットフォーム実行を可能にします。テストレポーティングも充実しています。buildsどんなデプロイメントの、ビルドを比較することができます。ファイルと、コミットメッセージを任意の二つのビルドで比較をできます。パイプラインが壊れているときは、使うことができません。bottlenecksGoCDのAgentはボトルネックを排除して、並列実行を提供します。tidyGoCDのテンプレートシステムによって、簡単にパイプラインの設定を再利用することができます。responsibleGoCDは、監視可能なデプロイメントをサポートして、ユーザーに対して適切にパイプラインの設定を渡すことができます。プラグイン機能PluginsEmbulkなどにも象徴されるように、たくさんのプラグインが用意されていて、私たち自身も作成をすることができます。特徴GoCDとは、どのような特徴があるのでしょうか。複雑なパイプラインを可視化できるGoCDでは、最初から最後まで一つのストリームマップで可視化をします。Native技術に対して親和性を持っていて、GoCDのCDワークフローをそれらの環境へデプロイできます。複雑なワークフローを定義できる複雑なパイプラインもモデル化できる構造GoCDのモデル構造によって複雑なワークフローのフィードバックを速く、並列実行し、依存関係をマネジメントできます。高度なトレーサビリティビルドの差分が分かるトレーサビリティによって、パイプライン自体が破壊された場合はその原因を変更によって検出することができます。概念いくつかの概念が出てくるので、理解しておいてください。タスクタスクとはアトミックな処理単位タスクとは、(普通は)アトミックな処理単位のことです。compileが挙げられています。ジョブジョブとは複数のタスクから構成される順序のあるまとまりジョブとは、複数のタスクから構成される順序があるまとまりのことです。包含するタスクが失敗すると、ジョブが失敗したと見なされます。ここのジョブやタスクの概念はCircleCIをはじめとするCIツールによく見られるので理解しやすいと思います。タスクはそれぞれ独立しており、他のタスクに影響を与えることはありません。ステージステージとは、並列処理できる複数のジョブを含む他のステージとは独立に動作することのできる単位ステージとは、並列処理できる複数のジョブを含む他のステージとは独立に動作することのできる単位です。それぞれのジョブの成功、失敗は、ステージに含まれる他のジョブへ影響はしません。パイプラインパイプラインとは、複数のステージが、順番に実行されるワークフローを定義するものパイプラインとは、複数のステージが、順番に実行されるワークフローを定義するものです。マテリアルとトリガーGitマテリアルマテリアルとは、パイプラインが実行される起因となるものです。GoCDは変更をポーリングしており、新しいコミットが見つかるとパイプラインがトリガーをされます。トリガーだけを見るとタイマートリガーもあります。それは定期的に設定した時間に対して実行をするようなものです。パイプライン依存マテリアルマテリアルは、パイプライン内のステージが他のパイプラインのマテリアルに使われるときに非常に効力を発します。以下のような種類があります。ファンアウトとファンインファンアウト、ファンインのデザインパターンは、ストリーム処理の界隈でもよく言われる話です。パイプラインでも同様です。バリューストリームマップ(VSM)VSMの例VSMとは、パイプラインのE2Eの可視化されたものです。成果物(Artifacts)成果物ジョブは、ファイルやディレクトリというような成果物を作成することができます。その成果物は、他のユーザーやパイプラインの下流のステージでも使えるようにGoCDは管理をしてくれます。成果物のフェッチ成果物のフェッチGoCDは"成果物をフェッチするタスク"という特別なタスクがあり、祖先パイプラインのどんな成果物も使うことができます。Agentどこでタスクや、ジョブ、パイプラインは実行されるのでしょう。AgentはGoCDエコシステムでのワーカーです。Agentは公式ドキュメントは以下のようなコンピュータの図で現れます。Serverに対してGoCDは実行したジョブなどを報告します。Serverは他のAgentからの報告もまとめて、パイプラインやステージの情報を可視化します。リソースAgentとジョブは、リソースによって強化することができます。リソースとは、タグのことで、どのAgentが特定のJobを実行するのに適しているかを優先順位づけをできるものです。AgentにつけられたリソースそしてリソースがつけられたAgentがあると、以下のように分配されます。環境パイプラインをグループ化して独立させることは簡単です。環境にはルールがあって環境は一つ以上のパイプラインからなるAgentはどの環境にも含まれない、または複数の環境に含まれてもいい環境に属するAgentはそのパイプラインのジョブのみを実行することができる任意の環境に所属しているAgentはどの環境にも属さないパイプラインのジョブは実行できないです。つまるところ、パイプラインとAgentを繋ぐのが環境ということです。環境、パイプライン、ジョブ、あらゆるレベルで環境変数は定義でき、階層構造のようになっています。具体的な対象(環境よりパイプライン、パイプラインよりジョブ)になるほど上書きができます。以下の図ですぐ理解できると思います。実践編それでは、実践してみましょう。GoCDのインストール今回はHelmを使ってやっていきます。WebUIにアクセスする以下のようにしてWebUIへアクセスをします。"http://$ip"すると以下のような画面が現れるはずです。タブにもあるように、ここではグループ化したパイプライン一覧画面になっています。GoCDのダッシュボード試しに再生ボタンを押してみるとAgentが作成される様子がわかります。11mそして、以下のようにタスクが終了しています。Pipelineボタンを押してパイプライン作成画面へ移行してください。Pipelineを押すすると、以下のように作成画面が現れます。適当に名前をつけます。Pipelineの名前をつけるそしてMaterialを設定します。次にStageを設定します。以下のように一つ一つ設定をしていきます。Stageを定義するそしてパイプラインを設定します。完成したパイプラインこのCDは使わないので、もう調べたくない....ってことで終わります!!!まとめ機能としてはGoCDは非常に優れているの感じました。VariableやAgentなど概念がそれぞれわかりやすく、また高機能でできることが多いからです。その反面、非常にドキュメント自体も長く、目を通さなければならないことが多いです。Codeは達成しづらいような状況です。他のアプリケーションをいじっていこうと思います。私は、いくつか家内サービスを運用しています。C...2018-12-23Concourseで継続的デリバリー。Calendarの23日目の記事にな...2018-12-14CircleCIでSpinnakerのデプロイメントパイプラインをデプロイするどうも、もうすぐ大学卒業の@timtimtim1026です。»プロフィール学生エンジニア。忘れてしまうので備忘録です。flaskでServerlessにホストするTelepresence概論スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。