読者です 読者をやめる 読者になる 読者になる

2017 CircleCI Meetup Tokyo #2 が開催されました #circleci #circleci_meetup

昨日3/10、弊社にて2度目のCircleCI Meetupが開催されました。

cyberagent.connpass.com

f:id:a-yamada:20170310183027j:plain

CircleCI 2.0について

CircleCI社よりDeveloperのKim氏にご登壇頂き、現在クローズドベータ公開中であるCircleCI2.0について発表していただきました。

1.0問題

  • ビルドイメージがUbuntuのみで、Dockerコンテナ上でのビルドにも未対応
  • LXCのprivileged問題(Dockerは特権保持していないLXCコンテナ上で動作させることはできない)を突破するために、Dockerにパッチを当てて運用していたがこの手法は1.9で行き詰まってしまい、CircleCIのDockerのバージョンはだいぶ遅れをとってしまっている
  • メモリ足りなくて落ちるよ問題(リソース決め打ち)
  • CircleCI創業が2012年で、ベースの技術がその当時のものであり刷新の機運にあった

2.0では

  • ビルドステップを自分で定義できる
  • Dockerでビルドするか、VMでビルドするかを選択できる
  • Local Buildができる!(機能制限はあるが、リポジトリにPushしなくてもtry and errorできる)
  • カスタムイメージを作れる image-builder
  • ビルドコンテナのスケジューリングにNomadを採用。ビルドジョブはバッチなので、KubenetesよりNomadを選択
  • small, medium, largeでビルドリソースの選択ができる
  • 内部のMicroservice間の通信にはgRPCを選択し、MicroservicesはKubernetesで運用
  • credentialsの扱いにVaultを採用、CircleCIはhashicorpプロダクト大好き

という感じ。機能もよいのだが、内部的な構造の話がものすごく良かった。

ベータプログラムのフィードバックであがってきているのは

  • Stepを自分で全て定義するので、Inference(リポジトリの構造を見てよしなにビルドをやってくれる1.0の機能)が無い
  • 適切なDockerイメージを選択しなければならない
  • そもそもドキュメントが足りない(これは今めっちゃ準備中らしい)

自分もCircleCI2.0を触り始めているけど、とにかく早く来てほしい💪

自分の発表

ちなみに自分もちょろっと喋ってきました。何故かCircleCI以外のことを喋って欲しい的なオーダーをいただきましたので、最近のCI界隈について雑に駆け足で喋ってきた。もっとスライドあったんだけどなるべく象徴的なものに絞ったつもり。

speakerdeck.com

ノベリティ

CircleCIのノベリティといえばTシャツとステッカーだったんですが、今回はそれに加えてボールがあった。こういうノベリティいいなー。

f:id:a-yamada:20170310183730j:plain:w400 f:id:a-yamada:20170310184255j:plain:w300

というわけでまた次回もやりましょう💪

CI環境におけるaws-cliのインストール結構つらいよね問題

つらい、というのはあくまでCircleCIとかでインストールするときの話。

github.com

動機

今Docker RegistryをAmazon ECRに移行していってるんですが、今までCI上でやっていたdocker build/docker tag/docker pushのプロセスをECRでも同様にやるために、ecr get-loginをする必要がある。

ecr get-login の正体はECRにdocker loginするためのコマンドを標準出力で返してくれるというもの。

$ aws ecr get-login --region ap-northeast-1
docker login -u AWS -p あなたのアクセストークン none https://あなたのID.dkr.ecr.ap-northeast-1.amazonaws.com

つまり、この docker login コマンドをCI上で実行すれば、ECRに対してdocker pushができる。

別途 ecr get-login でゲットした docker login コマンドを直接CI上でやればよくね?という議論もあるのだが、トークンは失効するし、そもそもウチのプロジェクトはアホみたいにリポジトリが多いのでトークン更新の度に、各リポジトリにcredentialsを設定して回るのはさすがにアホらしい。基本毎回 ecr get-login するのがいいと考えている。 

aws-cliインストールつらいよ問題

aws-cliリポジトリを見てもらえればわかるが、aws-clipythonを必要とする。

CircleCIではcache_directoriesの機能があるので初回以降はインストールしないみたいな制御も可能なのだが、そもそもCI上で使うのにたまにpip周りでハマったりするのもダルい。 なので、この手のツールは基本的にバイナリとして提供されるべきだと思っている。

というわけで、機能はaws-cliに比べると全然足りないのだが、インストールで消耗しないものを作った。 

github.com

Goで書かれている。go getで取得するもよいし、リリースタグ毎にtarボールでアーカイブしたlinux用のバイナリも用意してあるので、それをダウンロードして実行ディレクトリに配置するのがCI的には楽。今は機能が少ないので3MBくらいだが、多少機能が膨らんでもaws-cliをインストールするコストよりはいいだろうと思ってる。

ECRであれば、以下のようにやればaws-cliと同じく docker login コマンドが得られるように作ってある。 

$ lightaws ecr get-login --region ap-northeast-1

今後について

今のところaws-cliの機能をフルフルでクローンしていくつもりはさすがに無い。必要に応じて機能を追加していくスタイルなので、欲しいものがあればどんどんPRしていってほしい🙏

よいCIはよいバイナリから

JJUG ナイト・セミナー Kotlin(ことりん)でSpark Frameworkの話をしてきました #jjug #kotlin

JJUG ナイト・セミナー Kotlin(ことりん)でSpark FrameworkをKotlinで書いて気持ち(・∀・)イイ!!的な話をしてきました。

【東京】JJUG ナイト・セミナー 「Kotlin(ことりん)」 2/20(月)開催 - 日本Javaユーザーグループ/Japan Java User Group | Doorkeeper

発表スライドはこちら。本日は悪天候の中ご足労頂きありがとうございました。

speakerdeck.com

Server Side Kotlinやっていき〜💪