github+AWS+CircleCIを使ったCI環境作った
前々からやろうと思ってたことがなんとか動くレベルになりました。
全体の流れは
- githubのmasterブランチへpush
- CircleCIが検知してVagrantを使ってEC2インスタンスを立てる
- EC2インスタンスに対してchef solo / serverspecの実施
- テスト完了後EC2インスタンスを削除。(Volumeも削除)
はまったところ
CircleCIのSSH用の鍵の設定。AWS用のAPIキーは設定ファイルに書かずに環境変数に持たせるようにしてましたが、EC2用の鍵をどこに設定するんだろうと思ってました。
CircleCI側に設定できるみたいです。Your Branch Activityの対象PJの歯車マークをクリック->PermissionsのSSH Permissionsで鍵を設定することができます。
問題は鍵の名前です。例えばNameを"ci"として設定しましたが鍵が見つからないとVagrantに怒られました。CircleCIが建てたコンテナに入ってみると"ic_ci"となってました。何パターンか検証してみましたが、下記のようになりました
- ci -> id_ci
- ci.pem -> id_ci.pem
- id_ci -> 入力エラーになる
ということでid_というprefixをつけて指定しないといけないみたいです。
全体の流れはできたので、あとはAWSではなくてDockerを立ててみるとか、slackとかに通知できるようにしてみたいと思います。
IAMユーザの権限設定
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:AttachVolume", "ec2:CreateVolume", "ec2:*Instances", "ec2:DescribeSecurityGroups", "ec2:CreateTags" ], "Resource": [ "*" ] } ] }