GoCDの紹介
Go CD(continuous delivery/継続的デリバリーの略)はソフトウェアのビルド・テスト・リリースを行うCDツールです。
Apacheライセンス2.0で公開されているオープンソースでスポンサーはThoughtWorks社です。
パイプライン処理を主体とした設計により、複雑化しつつあるソフトウェアのビルドワークフローとデリバリーの問題を解決に導きます。
GoCDの主な機能
- 並列化ワークフロー
- ワークフローの可視化
- ビルド結果の比較
- グリッド化エージェントによるボトルネックの排除
- テンプレートによる設定簡略化
- バリューストリームマッピング(VSM)のサポート
- ジョブ単位での成果物管理
GoCDではビルドの構成要素がタスク・ジョブ・ステージに分割されており、マテリアル(データソース)をトリガーにパイプラインを実行する設計になっています。この基本設計によってCDが抱える問題・副作用がシンプル化されています。
GoCDのインストール
Ubuntu16.04にGoCD v17.3.0をインストールします。Debianベースのディストリビューション用のパッケージが準備されていますので、それを利用します。
GoCD Serverのインストール
以下コマンドを実行します。パッケージリストを更新しgo-serverパッケージをインストール出来るようにします。
$ echo "deb https://download.gocd.io /" | sudo tee /etc/apt/sources.list.d/gocd.list $ curl https://download.gocd.io/GOCD-GPG-KEY.asc | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install go-server
JavaとSpringに起因するエラーへの対処
本来なら上記コマンドにてインストールに成功しGoCDサーバーを起動できる所ですが、サーバーを起動するとエラーが表示されました。
$ sudo /etc/init.d/go-server start 出力結果:Error starting Go Server.
エラーログを見るとjava実行環境とspringに起因するエラーが発生しています。
$ sudo less /var/log/go-server/go-server.log Caused by: java.io.FileNotFoundException: class path resource [java/lang/Object.class] cannot be opened because it does not exist
go-server をインストールするとJava1.9が自動的にインストールされますが、他インストール手順を見るとJava1.8がインストールされているためJavaをダウングレードします。
$ sudo apt-get install openjdk-8-jdk
新しくインストールしたJavaのバージョンを使うようupdate-alternativesコマンドを実行してJava 1.8を選択します。
$ sudo update-alternatives --config java
再度GoCDサーバーを開始すると無事に起動しました。
$ sudo /etc/init.d/go-server start Started Go Server on http://user-VirtualBox:8153/go
GoCD Agentの追加
エージェントが必要なため、GoCDサーバーと同じ環境にGoCDエージェントもインストールします。
$ sudo apt-get install go-agent
以下のコマンドでGoCDエージェントが起動します。
$ /etc/init.d/go-agent start
出力結果:Started Go Agent.
GoCDの動作確認(Railsプロジェクトをスモークテストする)
動作確認のため、GitHubからRailsプロジェクトをCloneし、Agentでスモークテストして見ます。
パイプラインの基本設定
GoCDサーバーのURLに初めてアクセスするとパイプラインの追加ページが開きます。ここではtest-pipelineと入力します。
http://localhost:8153/go
マテリアルの設定
次にマテリアルの設定を行います。マテリアルタイプにGitを選択し、Ruby On Railsのリポジトリ(https://github.com/rails/rails.git)を対象URLに入力します。Check Connectionボタンを押すとURLへの疎通確認ができます。
ステージ・ジョブの設定
ステージとジョブの初期設定を行います。ステージ名とジョブ名はデフォルトのままにします。
RailsなのでタスクタイプをRakeにします。ここで設定したジョブは後で変更します。
FINISHボタンを押すとパイプラインが作られました。
エージェントの確認
次にパイプラインを実行するエージェントが登録されているか確認します。ページ上部のメニューバーのAGENTSリンクを押すとエージェントの一覧が開きます。
エージェントのsudo権限設定
sudoするユーザーにパスワード無しsudoを許可します。GoCD Agentの実行ユーザーはデフォルトでgoです。
$ sudo visudo Defaults:go !requiretty go ALL=(ALL) NOPASSWD:ALL
エージェントの環境構築
Railsプロジェクトのビルドとrakeコマンドに必要なライブラリ・環境一式をインストールします。
$ sudo apt-get install -y nodejs npm $ sudo apt-add-repository ppa:brightbox/ruby-ng $ sudo apt-get update $ sudo apt-get install ruby2.3 ruby2.3-dev libncurses5-dev libncursesw5-dev libxml2-dev libmysqld-dev libpq-dev libsqlite3-dev $ sudo gem install rake $ sudo gem install bundler
タスクの変更と追加
最初に作ったパイプランのジョブに変更を加えます。登録されているrakeコマンドを削除して、カスタムコマンドにbundle install 、rakeコマンドにsmokeを追加します。
まずコマンドの bundle installを追加します。
その次にrakeを選択してTargetにsmokeを指定して追加します。
ジョブにタスクが2つ追加されました。上から順にコマンドが実行されます。
パイプラインの実行
次にページ上部メニューバーの左上、PIPELINESを押してパイプラインの一覧を開きます。実行するパイプラインの再生ボタンを押すと、一連の処理がバックグラウンドで実行されます。
再生ボタンを押すと実行中の状態に変更されます。しばらく待つと完了します。
パイプラインの実行に成功しました。Label横の数字を押して実行結果の詳細を確認します。
パイプライン実行結果の確認
緑色のステータスバーを押すと実行結果の詳細に遷移します。
パイプライン実行結果のサマリーです。左jobsの中のdefaultjobのリンクを押すとコンソールの実行結果を見ることができます。
登録したコマンドの実行結果ログを参照できます。エラーになった場合にはエラー原因や発生個所がログから特定できます。
GoCD Agent上でRailsプロジェクトをcloneしSmokeテストを動作させ、GoCD Serverで結果を確認する事が出来ました。
まとめ
多くのCI/CDツールが公開されており競合が多い中でGoCDはあまり注目を集めていないかも知れませんが、アジャイル開発やDevOpsに影響を与え続けてきたThoughtWorks社のDNAとノウハウが反映されているツールです。
国内での利用は少ない印象ですが元々商用ツールであった点と、公式サイトを見ると採用実績もありますのでCI/CDツール導入の候補に挙げても良いかも知れません。
参考情報
https://www.gocd.io/
https://github.com/gocd
https://github.com/gocd/gocd
https://docs.gocd.io/current/
https://docs.gocd.io/current/installation/installing_go_server.html
https://docs.gocd.io/current/installation/install/server/linux.html#debian-based-distributions-ie-ubuntu
https://docs.gocd.io/current/installation/install/agent/linux.html
https://www.gocd.io/2014/03/06/hello-world-with-go/
https://www.thoughtworks.com/go/
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments