元営業WEBエンジニアのアプリ開発日記

営業出身のWEB系エンジニアが気になったものから作ってはメモを残してくブログ

DockerHubとGitHubの連携(k8s用)

概要

k8sで自分のアプリケーション作ってみたとき
Dockerfile修正してgithubにpush、dockerのimageはdockerhubにpushって
都度都度コマンド打つの面倒臭いなって思ってたら

Docker HubにGithubとの連携なるボタンがあったからやってみる

やりたいこと(できたこと)

GitHubにタグをpushしたら DockerHubがそれをキャッチして新たなイメージをビルド そしてよろしくタグの名前ができる!!

Docker Hubでの設定

GitHubとの連携登録

①の「Builds」を押して、②の「Link to Link to GitHub」を押して オラーーーーってパスワードとか言われるがままに打ち込んで連携しちゃう f:id:shintaro-0112:20190301005020p:plain

ビルドのルール作成

私の場合、1つのレポジトリにNGINXやgolangMySQLのDockerfileが複数あるので
①で対象のレポジトリを選択。

Dockerfileに関する変更があった時のみビルド実行したいので
ブランチベースではなくタグを見つけたらビルドするように設定する
②のSource Type:Tag

後は以下の感じで設定してみる

  • Build Context:レポジトリのルートから対象Dockerfileまでのディレクト
  • Source:/^n-[0-9.]+$/

    • ヒットさせるタグの名称
    • NGINX, golang, MySQLそれぞれビルドのトリガーを分けるために /^n-[0-9.]+$//^g-[0-9.]+$//^m-[0-9.]+$/の様に接頭文字をつけてみた
  • Docker Tag:release-{sourceref}

    • ヒットさせたタグの名称を使ってDocker imageのタグ作成

f:id:shintaro-0112:20190301005140p:plain

実験

実際に動くか実験してみると変更が反映されて
sample page => sample page2になってる!!

$ # Dockerfileでコンテナに渡してるindex.htmlを適当に修正
$ git diff
 <body>
-  <p>sample page</p>
+  <p>sample page2</p>
 </body>
$
$ # commit&tag&push
$ git add .
$ git commit -m "html少し修正" 
$ git push origin
$ git tag -a 1.0.0 -m "初回タグ付け"
$ git push origin 1.0.0
$ 
$ # Docke Hubブラウザでbuildsみるとキャッチできてた
$
$ # 対象のタグを指定してデプロイ
$ git diff
--- a/nginx-deployment.yaml
+++ b/nginx-deployment.yaml
     spec:
       containers:
-      - image: shintaro0123/nginx:1.0.4
+      - image: shintaro0123/nginx:release-1.0.0
$
$ kubectl apply -f nginx-deployment.yaml
$ curl http://`minikube ip` -H 'Host: nginx.ucwork.local'  
<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <title>sample page</title>
</head>

<body>
  <p>sample page2</p>
</body>

</html>

まとめ

なんか思ったより簡単にできた。
色々設定できるみたいだけどまぁとりあえず自動でビルドして欲しいだけだからこんなもんでいいやという気持ち