Route 53の設定をコンソールでポチポチするのが辛くなってきたので、Ruby製のRoadworkerでDNSの設定を管理して、CircleCIでリポジトリに変更をPushするだけで反映されるようにしました。
環境
- macOS High Sierra(10.13.6)
- Ruby 2.5.0p0
- Bundler 1.16.2
- Roadworker 0.5.8
RoadworkerのインストールとRoute 53の管理
以下を参考に進めました。
既存の設定をエクスポートする際に--split
オプションを使うとHosted Zoneごとにファイルを分割してくれるので便利でした。
$ bundle exec roadwork -e --split
CircleCIで自動的に反映するように設定
ここで問題が発生しました。
最初は以下のような.circleci/config.yml
を作り、
version: 2
jobs:
test:
docker:
- image: circleci/ruby:2.5-node-browsers
working_directory: ~/repo
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
- v1-dependencies-
- run:
name: Install dependencies
command: |
bundle install --jobs=4 --retry=3 --path vendor/bundle
- save_cache:
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
paths:
- ./vendor/bundle
- run:
name: Test
command: bundle exec roadwork -a --dry-run
apply:
docker:
- image: circleci/ruby:2.5-node-browsers
working_directory: ~/repo
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
- v1-dependencies-
- run: bundle --path vendor/bundle
- run:
name: Apply
command: bundle exec roadwork -a
workflows:
version: 2
test_and_apply:
jobs:
- test
- apply:
filters:
branches:
only: master
requires:
- test
リポジトリにプッシュすると、test
ジョブのbundle install
が以下のエラ=を吐いて落ちていました。
(...)
Installing aws-sdk-resources 3.25.0
Fetching aws-sdk 3.0.1
Installing aws-sdk 3.0.1
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory:
/home/circleci/repo/vendor/bundle/ruby/2.5.0/gems/pcaprub-0.13.0/ext/pcaprub_c
/usr/local/bin/ruby -r ./siteconf20181002-82-1hq923q.rb extconf.rb
[*] Running checks for pcaprub_c code...
platform is x86_64-linux
checking for ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_thread_call_without_gvl()... yes
checking for pcap_open_live() in -lpcap... no
checking for pcap_setnonblock() in -lpcap... no
creating Makefile
current directory:
/home/circleci/repo/vendor/bundle/ruby/2.5.0/gems/pcaprub-0.13.0/ext/pcaprub_c
make "DESTDIR=" clean
current directory:
/home/circleci/repo/vendor/bundle/ruby/2.5.0/gems/pcaprub-0.13.0/ext/pcaprub_c
make "DESTDIR="
compiling pcaprub.c
pcaprub.c:11:18: fatal error: pcap.h: No such file or directory
#include <pcap.h>
^
compilation terminated.
Makefile:242: recipe for target 'pcaprub.o' failed
make: *** [pcaprub.o] Error 1
make failed, exit code 2
Gem files will remain installed in
/home/circleci/repo/vendor/bundle/ruby/2.5.0/gems/pcaprub-0.13.0 for inspection.
Results logged to
/home/circleci/repo/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/pcaprub-0.13.0/gem_make.out
An error occurred while installing pcaprub (0.13.0), and Bundler cannot
continue.
Make sure that `gem install pcaprub -v '0.13.0' --source
'https://rubygems.org/'` succeeds before bundling.
In Gemfile:
roadworker was resolved to 0.5.8, which depends on
net-dns2 was resolved to 0.8.7, which depends on
packetfu was resolved to 1.1.13, which depends on
pcaprub
Exited with code 5
これについては、以下の記事のようにlibpcap-dev
をインストールすると直ります。
以下はCircleCI 1.0時代の話ですが、大丈夫でした。
(...)
- v1-dependencies-
- run:
name: Install dependencies
command: |
sudo apt-get install libpcap-dev # これを追記
bundle install --jobs=4 --retry=3 --path vendor/bundle
- save_cache:
(...)
これで、もうコンソールをポチポチしなくても済みそうです!