Edited at

Drone.ioのOSS版をAWS ECSに構築(ALB+SSL)

More than 1 year has passed since last update.

この記事はWHITEPLUS Advent Calendar 2016 3日目になります。

インターネットから申し込める宅配クリーニングサービスの開発基盤やインフラをよく触っているkai-zoaです。

いままで、私がいる開発チームではCircleCIを使ってきましたが、ワケあって今drone.ioの利用を検討しています。


今回のCIサーバーの要件

なぜいまdrone.ioかってのは微妙なところですが‥、今回の要件は下記。


  1. 当然だけど単体テストを実行できる

  2. 開発時と同じバージョンの環境でビルドとテストを行う

  3. テスト完了後に本番にデプロイする

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

変更の差分はこちら


参考にしたテンプレ

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-ecs.html


そして

でもまだテストを実行してません!(続くかも

明日の4日目はデザイナーのnimoni373です。


ホワイトプラスではエンジニアを募集しています

ホワイトプラスでは、新しい技術にどんどん挑戦したい!という技術で事業に貢献したいエンジニアを募集しております。!