2017年7月12日水曜日

VMware Harbor の harbor_ui のバイナリだけビルドしてみた

概要

前回 Harbor を docker コンテナ上でビルドしてみました
Harbor 内に含まれるバイナリの 1 つに harbor_ui というバイナリがあり API などを管理してます
今回はこのバイナリだけビルドしてビルドした独自のバイナリを動作確認するところまでやってみました

環境

  • CentOS 7.3.1611
  • make 3.82
  • docker 17.03
  • docker-compose 1.9.0
  • go 1.8.0

ビルドの流れを解析してローカルでビルドしてみる

Harbor のビルド全体を管理する Makefile 的には以下の「compile_ui」ターゲットで実行されていました

compile_ui:
        @echo "compiling binary for ui..."
        @$(GOBUILD) -o $(UIBINARYPATH)/$(UIBINARYNAME) $(UISOURCECODE)
        @echo "Done."

ターゲット的には単純に go build しているだけです
環境変数で構成されるコマンドを紐解くと

  • /usr/local/bin/go build -o ./make/dev/ui/harbor_ui ./src/ui

こんな感じになります
なので、ローカルの go 環境でビルドする場合は

  • cd /root/go/src/github.com/vmware/harbor
  • vim src/ui/api/search.go
    • 適当に書き換えてみる
    • log.Info(keyword) を L.45 に追加してみる
  • make cleanbinary
  • make compile_ui

とすればビルドすることができます
成功すると harbor-ui というバイナリが以下のディレクトリに生成されます

  • ls ./make/dev/ui/harbor_ui

これを既存のコンテナで動作しているバイナリと入れ替えます

docker コンテナ上で動作させる

すでに Harbor のコンテナが動作している前提で説明します
まず生成したバイナリをコンテナにコピーします

  • docker cp ./make/dev/ui/harbor_ui harbor-ui:/harbor/harbor_ui
  • docker restart harbor-ui

そしてコンテナを再起動したらコンテナの localhost に API を叩いてコードの変更が反映されているか確認してみましょう

  • docker exec -it harbor-ui /bin/bash
  • curl localhost/api/search?q=library

で API をコールして修正したコードが反映されているか確認することができます
今回の場合であればロギングを追加してるのでロギング用のコンテナホストに出力されています
Harbor の各種コンテナは syslog ドライバを使っているため上記ログに出力されます

  • docker exec -it harbor-log tail -f /var/log/docker/2017-07-11/ui.log

最後に

harbor_ui というバイナリファイルだけビルドして動作確認する方法まで紹介しました
これで API の部分にバグがあれば自分で修正して p-r を送信することができます
やるかわからないですが、、、

0 件のコメント:

コメントを投稿