2017年3月7日火曜日

Jenkins を使って Dockerfile を CI/CD する方法

概要

Jenkins の Docker Plugin を使って Jenkins から Dockerfile をビルドしてみました
基本的には前回の設定をそのまま使って行います

環境

  • Docker
    • CentOS 7.3.1611
    • Docker 1.12.6
  • Jenkins
    • CentOS 6.7 64bit
    • Jenkins 2.10
    • Docker Plugin 0.16.2

設定

ジョブを新規で作成して Github から取得した Dockerfile をビルドします

  • ソースコード管理 -> git

で Github の URL を入力します
もちろん Dockerfile が存在するリポジトリを選択してください
docker-plugin-build-dockerfile1.png

  • ビルド -> ビルド手順 -> Build / Publish Docker Containers

を選択します
以下の内容を入力します

  • Directory for Dockerfile・・・./
  • Cloud・・・test-docker-server
  • Image・・・hawksnowlog/request-dumper

docker-plugin-build-dockerfile2.png

Cloud の部分は前回設定した「システムの設定」->「クラウド」に追加した Docker 情報の Name になります

設定はこれで完了でジョブを実行してみましょう

動作確認

まずジョブが問題なく完了することを確認してください
コンソール出力には docker build の結果がデバッグログが表示されていると思います

また、docker ホストにログインしてイメージの一覧を確認するとジョブによって作成されたイメージが存在することが確認できると思います

  • docker images | grep hawksnowlog
hawksnowlog/request-dumper               latest              e3923949379a        6 minutes ago       735.9 MB

Tips

ちょっと Plugin の挙動の補足をしておきます

--no-cache=false で動作しているようです、これはジョブの設定からは変更することができなようです
なのでリソースが変更されていない状態だとすべてキャッシュを使ってイメージを作成するため超速です
試しに 2 回ジョブを実行してみると 2 回目はすぐに終了すると思います

タグ名に動的な値を入れることができない
今回だと hawksnowlog/request-dumper というタグにしています
キャッシュを使わず再ビルドが走ると新しいイメージに設定したタグが振られ古いイメージは <none> になってしまいます
一応 Jenkins 側のログに作成したイメージの ID が残るのでどのリソースから作成されたイメージから追うことはできますが <none> イメージが増えてしまうのはあまりうれしくはないと思います
なので、動的にタグ名が触れるといいのですがジョブの設定でビルド番号の変数などが使えなさそうだったので、どうするのだろうかなと思った次第です

最後に

Jenkins の Docker Plugin を使って Dockerfile 自体のビルドを行ってみました
これでリポジトリに push があった場合に、Dockerfile のビルドも自動で行うことができるようになると思います

あとは新規で作成したイメージから再度コンテナを作成すれば OK です
その辺の自動化も検証できたら紹介したいと思います

0 件のコメント:

コメントを投稿