Concourse CI を導入してみる(concourse web server の構築)

社内チームで扱うプロジェクトが増えたので、リリースタスクやテストの実行によるヘルスチェックを半自動化するために、CI環境を用意することにしました。

個人的にはあまりこの辺に興味がなくて(というかJenkinsに興味がなくて)全然触ってなかったのですが、この機会にConcourse CIを調べてみました。

Concourse CI

やりたかったこと

実現したかったポイントとして、社内でサーバを管理するのが面倒なので、

  • ビルドもインフラもコードで管理したい
  • CIサーバとビルドサーバを分けて構築し、それぞれを簡単に変更したい

といった点を考えていました。特にハードウェアの制限からサーバの移行などを実施するときに簡単に実施できるようにしておきたいと思っていて、極力CIサーバにデータを保存させたくないと思っていました。

究極的には各メンバの開発PCとかに分散させて空いているところで特定のスクリプトを実行するようなシステムでもいいと思っていて、最悪自作しようかなと思っていました。(それはそれでおもしろそうですが。)

また、CIを管理するメンバとそうでないメンバがいたりしないようにしたいとも思っていました。

そこで、Concourse CIに目をつけました。

Concourse CI on Docker and Vagrant

Concourse CI の紹介記事などはいっぱいあるので、ここでは Concource CI の基本構造を仮想化して簡単にサーバを構築するための Provisioning を用意してみました。

Concourse Docker

Concourse 公式が用意している Docker Compose を利用します。

Offical concourse/concourse Docker image. Contribute to concourse/concourse-docker development by creating an account on GitHub.
GitHub - concourse/concourse-docker: Offical concourse/concourse Docker image.

Docker engine と Docker compose がインストールされている環境であれば、このサーバを建てるのは README にある通りなので簡単ですが、MacOS や Windows Server 上でサーバを建てるにあたって、Docker daemon の起動にハードルがあったりするようなので、この Docker イメージをホストするための VM を Vagrant で準備することにしました。(実際 Mac だと Docker for Mac の起動は launchctl から実施できない)

Vagrantfile

まず、Box の選定ですが、Docker のホストイメージなので、boot2docker のように軽くて小さい、BargeOS を利用することにしました。

Yet another lightweight Linux distribution for Docker containers - GitHub - bargees/barge-os: Yet another lightweight Linux distribution for Docker containers
GitHub - bargees/barge-os: Yet another lightweight Linux distribution for Docker containers

BargeOS は元々 Docker をホストすることを想定している Linxu イメージで、非常に小さくて軽量です。また、公式に Vagrant Box も公開されています。最初から Docker engine のインストールもされています。

Vagrant Cloud by HashiCorp
Vagrant Cloud by HashiCorp

あとは、Vagrantfile を書いていくだけです!

Concourse + Vagrant

まず手始めにググってみたところ、まさにコレという環境を作っている方が記事を投稿されていたので、そのまま参考にさせていただきました。

はじめに

この記事は初心者エンジニアが自宅サーバーを構築した際のメモや構成を記したものです。 多くのWEB上の情報に助けられたので、私もこの場を借りてアウトプットしておきます。

なぜVagrantを使ったか

y_hokke…

bargeOSとdockerでらくらく管理できる自宅サーバーを構築してみた - Qiita

Vagrantfile の configuration はほとんどそのまま利用させていただきました。最初に自分も vagrant の file sync で実施してみたのですが、permission 問題があったので、面倒なので vdi の戦略もそのままいただきました。m( )m

あとは、基本的に Docker で構築するサービス部分を docker concourse の内容に置き換えていくだけでした。

最後に、Concourse の方と Vagrantfile の方でいくつか共通で設定をしたい内容があったので、それらを config として外だしして、vagrant up 実行時に適用する改修を行いました。そのアプローチは、下記の stackoverflow を参考にさせていただきました。

Can anyone guide me to how do I include variables in my VagrantFile? I am trying to inject configs into the Vagrantfile from an external file so that I can distribute the config to my colleagues wi...
How do I include variables in my VagrantFile?

まとめ

実際は、Docker for Mac で concourse を建てて daemon 化の実験から始まって、Vagrant + ubuntu イメージで最初の VM 化を実施したりしていました。最初の戦略では、Box 自体を作成してその中に concourse 環境をパッケージするつもりでした。しかし、最終的な project のとおり、docker-compose と vagrant の provisioning で実施できるようになったので、取り回しが良くなってよかったと思います。(上記 Qiita 記事を投稿された akabe87 さんに感謝)

Contribute to tomoyukim/concourse-vagrant development by creating an account on GitHub.
GitHub - tomoyukim/concourse-vagrant
Built with Hugo
テーマ StackJimmy によって設計されています。