Circle Ciでlocalhostへ設定してあるfluentdを使用する方法とcircle.yml
現在とあるRuby on RailsのプロジェクトでCircle Ciを使っているのですが、その中でfluent-logger-rubyを使っています。
Fluent::Logger::FluentLogger.open(nil, :host => localhost, :port => 24224)
こんな感じですね。 それでこれをまんまCircle CiでRspecしようとすると、当然Circle Ciのログで
ERROR -- : Failed to connect fluentd: Connection refused - connect(2) for "localhost" port 24224
とエラーが出てfailしてしまいます。
どうしたものかわからなかったので、Live Supportに問い合わせたところ「sudo出来るように設定を変更するので、そこでapt getでもして」という回答をもらったので、それを反映したcircle.ymlがこちら
machine:
ruby:
version: 2.1.2
dependencies:
pre:
- curl -L http://toolbelt.treasure-data.com/sh/install-ubuntu-precise.sh | sh
- sudo cp config/circle/td-agent.conf /etc/td-agent/td-agent.conf
- sudo /etc/init.d/td-agent stop
- sudo /etc/init.d/td-agent start
database:
override:
- mv config/circle/database.yml config/database.yml
- bundle exec rake db:create db:migrate db:seed --trace
Circle Ci用の設定ファイルが複数になったので、config/circle/ 以下に入れています。
config/circle/td-agent.confの中身は単純にこんな感じです
<source>
type forward
port 24224
bind 0.0.0.0
</source>
<match **>
type stdout
</match>
これでRspecがfluentdアクセスの部分でエラーを吐く事は無くなりました。
でもCircleCi + fluentd 使ってる方たちって他どうやってるんでしょうかね?検索してもあまり事例なかったので。
あとついでにもう一つ気になっているのが、EC2上のサーバにDeployする時のSSHのSecurityGroupの設定なんですが これも皆さんどうしてるものなんですかね?
今回は別途chefでサーバを作っていますが、capistranoからaws-sdkを用いてもDockerだとしても、CircleCiからEC2サーバに何かさせる時に どうするか?という点では同じかと。
CircleのSourceで全部やってるんですかね???
なので該当のサーバからtemporaryで空けてやっています。
そのスクリプトはこのクラスメソッドさんのエントリ のが良いので
参考にさせて頂いて、このDeploy用のIAM circleciを用意して都度Open/Closeしています。
具体的には
config/circle/openssh.sh
#!/bin/sh
export AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
export AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
export AWS_DEFAULT_REGION=ap-northeast-1
MYSECURITYGROUP=<MYSECURITYGROUP>
MYIP=`curl -s ifconfig.me`
aws ec2 authorize-security-group-ingress --group-id $MYSECURITYGROUP --protocol tcp --port 22 --cidr $MYIP/32
config/circle/closessh.sh
#!/bin/sh
export AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
export AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
export AWS_DEFAULT_REGION=ap-northeast-1
MYSECURITYGROUP=<MYSECURITYGROUP>
MYIP=`curl -s ifconfig.me`
aws ec2 revoke-security-group-ingress --group-id $MYSECURITYGROUP --protocol tcp --port 22 --cidr $MYIP/32
ただし、現状のCircleCiのUbuntuに入っているawsコマンドはバージョンが古いのでこれをそのまま事項すると
--group-id: mispelled meta parameter?
とエラーになってしまうので、バージョンUPするコマンドもcircle.ymlに忍ばせています。
machine:
ruby:
version: 2.1.2
hosts:
localhost: 127.0.0.1
staging-web: xx.xx.xx.xx
dependencies:
pre:
- curl -L http://toolbelt.treasure-data.com/sh/install-ubuntu-precise.sh | sh
- sudo cp config/circle/td-agent.conf /etc/td-agent/td-agent.conf
- sudo /etc/init.d/td-agent stop
- sudo /etc/init.d/td-agent start
- sudo pip install awscli
database:
override:
- mv config/circle/database.yml config/database.yml
- bundle exec rake db:create db:migrate db:seed --trace
deployment:
staging:
branch: master
commands:
- sh config/circle/openssh.sh
- bundle exec cap staging deploy
- sh config/circle/closessh.sh
といった感じなのですが。
欠点は全体的に時間がかかってしまう事ですかね〜