Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CodeBuildを使ったCI環境の構築

AWS CodeBuildを使ったCI環境の構築

KINOSHITA Minoru

October 02, 2019
Tweet

More Decks by KINOSHITA Minoru

Other Decks in Programming

Transcript

  1. 自己紹介 樹下 稔 (KINOSHITA Minoru) • KLab株式会社 ◦ 技術統括部 バックエンドアーキテクチャグループ

    + 案件の仕事 ▪ Jenkinsの話 ▪ Unityのアセットバンドルビルドの話 ▪ CIの話 ▪ ... ◦ 横断的に情報共有しつつ実案件での仕事ができるポジション
  2. CI構成 .buildspec/test1.yml .buildspec/test2.yml .buildspec/test3.yml 特定のディレクトリに buildspecファイルを複 数入れておく test1.yml test2.yml test3.yml

    Lambdaがbuildspecファ イル毎にCodeBuildを起 動する 全部終了したらGitHub Checksに結果を書き込む &Slackに通知
  3. jsonnet test.jsonnet local Test(name) = { person: { name: name,

    welcome: "Hello " + name + "!" }, }; { "test-alice.yml": std.manifestYamlDoc(Test("Alice")), "test-bob.yml": std.manifestYamlDoc(Test("Bob")) } test-bob.yml "person": "name": "Bob" "welcome": "Hello Bob!" test-alice.yml "person": "name": "Alice" "welcome": "Hello Alice!" $ jsonnet -S -m . test.jsonnet
  4. DBなどのサービス起動 • docker in dockerができるイメージでdocker-composeを実行する ◦ Pros ▪ 開発用のdocker-composeをそのまま流用できる ▪

    ローカルでのCodeBuildのテストも可能になる ◦ Cons ▪ docker-composeのインストールやdockerdの起動など一手間必要 https://github.com/aws/aws-codebuild-docker-images ※CodeBuildのdockerイメージもある
  5. ログ • LambdaでCodeBuildの出力をGitHub Checksに書き込む ◦ 権限の問題 ▪ AWSのアカウントを持っていないメンバーもいる ▪ GitHubなら全員アクセス可能

    ◦ 使いやすさの問題 ▪ AWSに慣れていないメンバーが多い ▪ CloudWatch Logsは使いにくい ▪ GitHubから直接結果が見れると便利
  6. リポジトリのセットアップについて • submoduleはブランチ名不明でハッシュしか分からないので git init git remote add origin <repo>

    git fetch origin --depth=1 <hash> git reset --hard FETCH_HEAD • これが成功するのは<hash>が特定のrefに紐付いている場合のみ ◦ そうでないときは失敗するので諦めて普通にcloneする
  7. リポジトリのセットアップについて • AWS CodeBuildにはローカルキャッシュの機能がある ◦ ホスト上にdockerイメージやソースリポジトリを保存して使い回す機能 ◦ 今回の場合ストレートには使えない ▪ dindだったり独自にgit

    cloneしているため https://aws.amazon.com/jp/about-aws/whats-new/2019/02/aws-codebuild-now-supports-local-caching/ 任意のディレクトリをキャッシュできるのでやればできると思うが、キャッシュの生存期間は有限らしいので努力 に見合う効果があるのか?と思って試していない・・・
  8. 意外とコードを書いてしまった • ありものを使うので自前の処理はそこまで多くない想定だった • 実際にはLambda(js)を500行程度書いた ◦ buildspecファイルを探して指定 ◦ ビルド時間に制限 ◦

    通知先チャンネルの指定 ◦ テストが全部終了したことを確認して通知 • 保守コストをほぼなくせるのではないかという目論見は外れた