CIで回そう!
前回まででついにAnsible + ServerspecでMacの構成管理ができたわけですが、まだ残ってることがあります。
それがCIにのせることです。
は?
意味あるの?と思われた人も多いと思いますが、そこそこ意味のある活動になります。
なぜなら…
一度プロビジョニングしたMacは初期化しない限り二度ときれいなMacにはならないからです。
なんかの格言ぽいですが、常にクリーンなMacで作った構成管理を確かめてみたい、ということでCIに乗っけてしまいます。
Table of Contents
macOS X が使えるCIってあるの?
結論から先にかけばあります。
私の大好きなCIのCircleCIだってmacOS XのOSイメージは用意されています。
ですが、CircleCIの場合で$39/Monthとお金がかかってしまいます…。(2019/10現在)
こんな個人プロジェクトにお金を払うわけにはいきませんで、別のCIを考えます。
Azure DevOps Build Pipeline
MacOS Xが無料で使えるCIはいくつかあるのですが、今回はAzure DevOps Build Pipelineにしました。
選定の理由はUIがかっこよくて見やすいのと、
- task: UseRubyVersion@0
inputs:
versionSpec: '>= 2.4'
- task: NodeTool@0
inputs:
versionSpec: '10.15.3'
とすることで、Build上必要なパッケージが利用可能になるからです。
(今回はServerspecでRubyを使うのですが、Rubyも構成管理してるので本機能は不要でした…)
Yamlを書く
CIの定義を万と書いてきた私からしたら、つらい…とも思わないのですがCIを動かすための定義をYamlに書いていきます。 rootディレクトリにazure-pipelines.yml
を作り、定義を書いていきます。
trigger:
- master
jobs:
- job: Run_Ansible_and_Serverspec
pool:
vmImage: 'macOS-10.14'
steps:
- task: UseRubyVersion@0
inputs:
versionSpec: '>= 2.4'
- task: NodeTool@0
inputs:
versionSpec: '10.15.3'
- script: |
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install ansible
displayName: 'Install Ansible'
- script: |
rm -rf /usr/local/bin/node
displayName: 'Uninstall default node'
- script: |
make setup TARGET=mac
displayName: 'Run Ansible'
- script: |
make before-check TARGET=mac
displayName: 'Before Run Serverspec'
- script: |
make check TARGET=mac
displayName: 'Run Serverspec'
ScriptにMakefileで定義したコマンドを入れているだけです。
無事CIが通りました!
結論
Azure DevOps Build Pipelineで簡単にできました!