この記事はWHITEPLUS Advent Calendar 2016 3日目になります。
インターネットから申し込める宅配クリーニングサービスの開発基盤やインフラをよく触っているkai-zoaです。
いままで、私がいる開発チームではCircleCIを使ってきましたが、ワケあって今drone.ioの利用を検討しています。
今回のCIサーバーの要件
なぜいまdrone.ioかってのは微妙なところですが‥、今回の要件は下記。
- 当然だけど単体テストを実行できる
- 開発時と同じバージョンの環境でビルドとテストを行う
- テスト完了後に本番にデプロイする
3つめがワケあってと書たところで、デプロイの処理はAWS上の本番と同じVPC内で行のがベストでした。
そこでOSS版が公開されていて好きな環境に構築できるdrone.ioに目をつけました。
また、drone本体やプラグインのほとんどが普段読み書きしてるGoで実装されているので、なにかあればコード読めるところが導入に前向きな理由だったりもします。
公式のCloudformationテンプレートを使用してECSに構築する
下記に公式のテンプレがあるので実はこれを使えば瞬殺です。
https://github.com/drone-demos/drone-on-ecs
githubと連携する場合の例です。
あらかじめOAuthアプリケーションとして登録しておいてクライアントIDとシークレットをパラメーターに指定します。
git clone https://github.com/drone-demos/drone-on-ecs.git
cd drone-on-ecs
cat <<EOF > params.json
[
{
"ParameterKey": "VPC",
"ParameterValue": "vpc-hoge"
},
{
"ParameterKey": "Subnets",
"ParameterValue": "subnet-hoge,subnet-piyo"
},
{
"ParameterKey": "KeyName",
"ParameterValue": "aws-hoge"
},
{
"ParameterKey": "DroneRemoteDriver",
"ParameterValue": "github"
},
{
"ParameterKey": "DroneRemoteConfig",
"ParameterValue": "https://github.com?client_id=...&client_secret=..."
},
{
"ParameterKey": "DroneInstanceType",
"ParameterValue": "t2.small"
},
{
"ParameterKey": "IncomingHttpCidr",
"ParameterValue": "0.0.0.0/0"
}
]
EOF
aws cloudformation create-stack --stack-name drone-ci \
--template-body file://template.json \
--parameters file://params.json \
--capabilities CAPABILITY_IAM
はいできました。
コンテナに割り当てるメモリーサイズが既定値の場合、インスタンスタイプがt2.small相当以上の必要がありました。
ALB対応してSSLを使う
これで終わるのも寂しいので…ちょっとテンプレをいじります。
公式のテンプレだと、ELBはいわゆるClassic LoadBalancerを構築するのでこれをALBにして、リスナーもHTTPSにしてCertificateManagerの証明書を利用するようにしてみました。
https://github.com/WHITEPLUS/advent-calendar2016-drone-on-ecs
変更の差分はこちら
参考にしたテンプレ
そして
でもまだテストを実行してません!(続くかも
明日の4日目はデザイナーのnimoni373です。
#ホワイトプラスではエンジニアを募集しています
ホワイトプラスでは、新しい技術にどんどん挑戦したい!という技術で事業に貢献したいエンジニアを募集しております。!