- Product Manager
- Web Engineer
- Customer Support
- Other occupations (60)
- Development
-
Business
- Product Manager
- プロダクトマネージャー
- 広報
- カルチャー推進・浸透
- 知財戦略立案・推進・発明発掘
- リスクマネジメント統括本部
- 内部監査
- AML/CFTコンプライアンス
- AML・金融犯罪対策Ops
- 金融コンプライアンス
- システム監査
- ビジネス採用担当
- 経営企画(予実・IR)
- HRBP
- Legal
- 債権管理/MFK
- ToB Sales
- インサイドセールス
- フィールドセールス
- インサイドセールス SDR
- インサイドセールス企画
- オンラインセールス
- SaaS営業、MFBC
- インサイドセールス MFBC
- セールス MFBC
- マーケティングリサーチャー
- マーケター
- データマーケター
- BtoBマーケティングリーダー
- CRMスペシャリスト
- イベントマーケター
- Other
こんにちは。マネーフォワードエンジニアの鈴木です。
最近ではCIもすっかり定着し、みなさんの職場にもJenkinsサーバないし何かしらのCIが稼動していることかと思います。
YumやAPTなどのパッケージ管理ツールでインストールすることも多いかと思われますが、最近では様々な仮想化ソフトウェアの台頭もあって、Ansibleのようなプロビジョニングツールがよく使われるようになりました。
セットアップ手順をコード化することには以下のようなメリットがあります。
手順を明確にしオープンにすることで、属人性をなくせる仮想環境への構築が容易になるので、serverspecなどでテストしやすくなる管理コストを削減できる
Ansibleには、Ansible galaxyというrole(ノードの役割設定)を共有できるhubサービスがあり、世界中のユーザが作成したroleを利用することができます。
今回はAnsible galaxyを使ってJenkinsをセットアップする手順をご紹介します。
前準備
構築するためのテスト環境として、仮想マシンを用意しましょう。VirtualBoxがおすすめです。
Vagrantで適当なOSを立ち上げます。運用環境で使うものと同じOSが良いでしょう。今回はCentOSにします。
vagrantbox.esにOSのリストがあります。
mkdir jenkins_test
cd !$
vagrant box add centos6.5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
vagrant init
Vagrantfileは以下のようにします。config.vm.defineを追加してください。
もともと複数台セットアップするための仕組みのようですが、名前を付けておかないとserverspec-initのジェネレータがdefaultという名前でホストを認識し、困ったことになるのでこうしています。
Vagrantfile
Vagrant.configure(2) do |config|
config.vm.box = 'centos6.5'
config.vm.box_url = 'https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box'
config.vm.define 'jenkins' do |jenkins|
jenkins.vm.network 'forwarded_port', guest: 8080, host: 8080
jenkins.vm.network 'private_network', ip: '192.168.33.10'
end
config.vm.provider 'virtualbox' do |vb|
vb.memory = '1024'
end
end
vagrant up jenkinsとすると起動します。
Serverspecを書く
いきなりJenkinsをインストールしても良いですが、せっかくなのでテストファーストでやってみましょう。
serverspecがインストールされていない場合は、こんなGemfileを書いてbundle installします。
Gemfile
source 'https://rubygems.org'
gem 'rake'
gem 'serverspec'
serverspec-initを実行し、以下のようにします。
spec/jenkins/sample_spec.rbが生成されるので、これをspec/jenkins/jenkins_spec.rbにリネームし、以下のようにspecを書きます。
spec/jenkins/jenkins_spec.rb
require 'spec_helper'
describe package('jenkins') do
it { should be_installed }
end
describe service('jenkins') do
it { should be_enabled }
it { should be_running }
end
describe port(8080) do
it { should be_listening }
end
bundle exec rakeを実行し、テストが失敗することを確認します。
Ansible galaxyでJenkinsを探してインストールする
ここでAnsible galaxyの登場です。
galaxy.ansible.comでJenkinsを探します。
Jenkinsで検索するとたくさん出てきますが、CentOSをサポートしていてメンテナンスされているように見えるgeerlingguy.jenkinsにしてみます。
Githubへのリンクも貼られていますので、必ず実装を確認しましょう。
gemに近いイメージで、メタファイルに記述された依存情報を元に自動的に解決してくれます。
インストールするrole名は、直接コマンドラインに指定することもできますし、列挙したファイルを指定するインターフェースも用意されています。
今回は依存関係を明示する意味でもファイルに書くことにします。
echo "geerlingguy.jenkins" >> requirements
ansible-galaxy install -r requirements
これでインストール完了です。(手元の環境では/usr/local/etc/ansible/にインストールされました)
このroleを利用して、inventoryとplaybookファイルを書きます。
inventoryはplaybookで使用する論理的なグループを定義します。
test-servers
[jenkins]
192.168.33.10
[jenkins:vars]
ansible_ssh_user=vagrant
ansible_ssh_private_key_file=.vagrant/machines/jenkins/virtualbox/private_key
ansible_sudo=true
playbookは論理的なサーバの役割や、セットアップ時に渡す変数などが記述できます。
site.yml
- hosts: jenkins
roles:
- jenkins
実行します。
ansible-playbook -i test-servers site.yml
Serverspecで確認する
無事起動していることを確認したら、serverspecでも確認しておきましょう。
bundle exec rake
Jenkinsをカスタマイズする
これでJenkinsの起動までは確認できました。
必要に応じて、Jenkins pluginを増やしたりjobを追加したりしましょう。
pluginについてはhost_varsを利用して追加インストールできますが、jobの管理は今回インストールしたroleには実装されていません。
Ansible galaxyにあるコードや公式ドキュメントを参考に、ぜひカスタマイズしてみてください。
最後に
マネーフォワードでは何でもコードで自動化したいエンジニアを募集しています。
みなさまのご応募お待ちしております!