engineers_blogこんにちは。マネーフォワードエンジニアの鈴木です。最近ではCIもすっかり定着し、みなさんの職場にもJenkinsサーバないし何かしらのCIが稼動していることかと思います。YumやAPTなどのパッケージ管理ツールでインストールすることも多いかと思われますが、最近では様々な仮想化ソフトウェアの台頭もあって、Ansibleのようなプロビジョニングツールがよく使われるようになりました。セットアップ手順をコード化することには以下のようなメリットがあります。galaxyというrole(ノードの役割設定)を共有できるhubサービスがあり、世界中のユーザが作成したroleを利用することができます。galaxyを使ってJenkinsをセットアップする手順をご紹介します。構築するためのテスト環境として、仮想マシンを用意しましょう。VirtualBoxがおすすめです。Vagrantで適当なOSを立ち上げます。運用環境で使うものと同じOSが良いでしょう。今回はCentOSにします。vagrantbox.esにOSのリストがあります。initVagrantfileは以下のようにします。config.vm.defineを追加してください。複数台セットアップするための仕組みのようですが、名前を付けておかないとserverspec-initのジェネレータがdefaultという名前でホストを認識し、困ったことになるのでこうしています。jenkinsとすると起動します。Serverspecを書くいきなりJenkinsをインストールしても良いですが、せっかくなのでテストファーストでやってみましょう。installします。'serverspec'serverspec-initを実行し、以下のようにします。spec/jenkins/sample_spec.rbが生成されるので、これをspec/jenkins/jenkins_spec.rbにリネームし、以下のようにspecを書きます。rakeを実行し、テストが失敗することを確認します。galaxyの登場です。galaxy.ansible.comでJenkinsを探します。Jenkinsで検索するとたくさん出てきますが、CentOSをサポートしていてメンテナンスされているように見えるgeerlingguy.jenkinsにしてみます。Githubへのリンクも貼られていますので、必ず実装を確認しましょう。gemに近いイメージで、メタファイルに記述された依存情報を元に自動的に解決してくれます。インストールするrole名は、直接コマンドラインに指定することもできますし、列挙したファイルを指定するインターフェースも用意されています。今回は依存関係を明示する意味でもファイルに書くことにします。requirementsこれでインストール完了です。(手元の環境では/usr/local/etc/ansible/にインストールされました)このroleを利用して、inventoryとplaybookファイルを書きます。inventoryはplaybookで使用する論理的なグループを定義します。test-servers[jenkins]192.168.33.10[jenkins:vars]ansible_ssh_user=vagrantansible_ssh_private_key_file=.vagrant/machines/jenkins/virtualbox/private_keyansible_sudo=trueplaybookは論理的なサーバの役割や、セットアップ時に渡す変数などが記述できます。jenkins実行します。site.ymlServerspecで確認する無事起動していることを確認したら、serverspecでも確認しておきましょう。rakeJenkinsをカスタマイズするこれでJenkinsの起動までは確認できました。pluginを増やしたりjobを追加したりしましょう。pluginについてはhost_varsを利用して追加インストールできますが、jobの管理は今回インストールしたroleには実装されていません。galaxyにあるコードや公式ドキュメントを参考に、ぜひカスタマイズしてみてください。最後にマネーフォワードでは何でもコードで自動化したいエンジニアを募集しています。