Skip to content

Instantly share code, notes, and snippets.

@blackawa
Last active July 17, 2018 09:37
Show Gist options
  • Save blackawa/56355c131e29c96af3e444bc9e31632d to your computer and use it in GitHub Desktop.
Save blackawa/56355c131e29c96af3e444bc9e31632d to your computer and use it in GitHub Desktop.
GitHubでmasterブランチへのプルリクエストがマージされたら自動でk8sにデプロイするしくみを作る

プルリクエストがmasterブランチにマージされたら

  1. あるリポジトリのあるプルリクエストがmasterブランチにマージされたら飛んでくるwebhookを受け取る
  2. そのリポジトリをcloneし、イメージのバージョンが書かれているファイルを探す
  3. 見つかったファイルのイメージのバージョンを上げる
  4. 変更をmasterブランチにpushする
  5. GitHubにDeploymentを発行する

自動でk8sにデプロイするしくみを作る

工程に失敗したら必ず通知される。

  1. そのリポジトリをcloneし、イメージのバージョンが書かれているファイルを探す
  2. Cloud Container Builderでビルド、イメージをプッシュする
  3. k8sにjobを発行する
  4. kubernetesに対してDeploymentを操作してBlue/Green Deploymentを実行させる
    1. deployment.yamlをコピーしてgreenラベルつきに修正する
    2. greenラベルつきのdeploymentをapplyする
    3. serviceのselectorをgreenラベルつきに変える
    4. 元のdeployment.yamlをapplyする
    5. serviceのselectorからgreenラベルを外す
    6. greenラベルのdeploymentを削除する
    7. Slackに通知する

設定で可変になるとよい箇所

  • GitHubのアカウント名
  • GitHubのメールアドレス
  • GitHubのアクセストークン
  • 通知先のSlackのアクセストークン
  • 通知先のSlackの部屋名
  • k8sのデプロイ先のnamespace(デフォルトでdefault)
  • cloudbuild.yamlの名前リスト(デフォルトで cloudbuild.y(a)ml を探す)
  • deployment.yamlの名前リスト(デフォルトで deployment.y(a)ml を探す)
  • job.yamlの名前リスト

懸念事項

  • GitHubの真似をして知らない人がこのAPIを叩いてきた時にちゃんと弾く方法
    • 送信元を見るかな
  • 手元でyamlを編集してgit commit/pushする方法
    • またJGitに入門かな...
  • k8sを操作する方法
    • JavaのSDKがあった気がするから、それでAPI叩いてみれないかな
  • 複数リポジトリのhookをうまいこと扱う方法
    • 初回は鍵を順番に試して、リクエストに成功したらその情報を覚えておく?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment