Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy

17,001 views

Published on

「第8回大阪Jenkins勉強会」(2016/12/10)にて発表させて頂いたスライドです。(時間:40分)

申し込みサイト : https://connpass.com/event/44408/

Published in: Software
  • Be the first to comment

JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy

  1. 1. JenkinsとDocker って何が良いの? 言うてるオレもわからんわ〜 〜 第8回大阪Jenkins勉強会 Ver 0.1
  2. 2. Part.1 アンタだれ?
  3. 3. 自己紹介 • 通称:みうみう,「なんで来たん?」氏 • Twitter:@kazuhito_m • Github:kazuhito-m • 老害度:39歳、独身、意識低い系 • 職業:プログラマ(SIer、ビジネスアプリ 属),自動家(オートメータ) – フリーランス,屋号「みうらさんとこ」 • 好きなもの:自動化,「継続的なんとか」 – CI/CDとか大好物 – 「楽する」ためには「苦労は厭わない」 三浦 一仁(ミウラ カズヒト)
  4. 4. 自己紹介 • 通称:みうみう,「なんで来たん?」氏 • Twitter:@kazuhito_m • Github:kazuhito-m • 老害度:38歳、独身、意識低い系 • 職業:プログラマ(SIer、ビジネスアプリ 属),自動家(オートメータ) – フリーランス,屋号「みうらさんとこ」 • 好きなもの:自動化,「継続的なんとか」 – CI/CDとか大好物 – 「楽する」ためには「苦労は厭わない」 三浦 一仁(ミウラ カズヒト) 最近は… ダイエット芸人 です。
  5. 5. Part.2 前置き
  6. 6. 注意 今回のハナシは… • 完全我流 • (世界に照らして)正しいこと言うてる確証が無い という「総じて言うと”嘘ばっかり”」なので • Jenkins警察 • Docker警察 • Docker & Jenkins警察 の方、居られましたら「つっこみは発表終わった後」 に、お願いします。
  7. 7. 対象外のハナシ 今回、「お話しない内容」 • ✗Jenkins/Dockerの「メカニズム」の話 –○「使う側」の「用途」「使い方」の話 • ✗「Windows系のDocker」の話 –○Linux(Onlyの)Dockerの話
  8. 8. トツゼンですが アンケートです
  9. 9. みなさんを知りたい • みなさんは今日どんな感じですか? ①Jenkinsの知識は無い (今からのため来た) ②Dockerの知識が無い (今からのため来た) ③DockerとJenkinsの組み合わせはよ く判らん ④知ってるから「ツッコミ」に来た
  10. 10. Part.3 ナンデキタン? (本日の目的)
  11. 11. 最近、 よう聞かれるん です…
  12. 12. わしゃ素人じゃちゅうに… 「JenkinsとDocker」 ってどうなんすかね? 良い感じです?
  13. 13. わしゃ素人じゃちゅうに… 「JenkinsとDocker」 ってどうなんすかね? 良い感じです?知らんがな。 そもそも何聞いてるかわからんし、 ワシも「我流で始めたトコ」じゃ
  14. 14. じゃあそれこそ「なんできたん?」 とか言うと「発表終わってまう」ので… • ググッて調べたこと(付け焼き刃、確証無し) • 自身の経験(我流) を元に、皆様には とっさに使える基礎英語Jenkins&Docker 的なのを 「知ったかぶりしていただけるような何か」 を持って帰って頂こうと来ました。
  15. 15. Part.4 まずは確認
  16. 16. Jenkinsって?
  17. 17. Jenkinsとは •Jenkinsとは
  18. 18. Jenkinsとは •Jenkinsとは割愛
  19. 19. Jenkinsの良いとされてるトコロ Jenkinsの「良い」とされてるトコロ (オレ調べ with Google先生) • OSSのフリーソフトである • 利用実績とナレッジの多さ • 自身がJavaプログラムであり洗練されている – 「Javaのプログラム」に関するケアは手厚い • プラグインが充実している • ビルドの手続きをAsCodeできる – 2.0からの特性
  20. 20. オレの「Jenkinsの良いトコロ」 ミウラにとっての「Jenkinsの良いトコロ」 •自動化! •めっちゃ好き! • 超絶閉鎖空間でも使える
  21. 21. Dockerって?
  22. 22. Dockerとは •Dockerとは割愛 ですが少しだけ説明を…
  23. 23. Dockerの特性 Dockerの特性として… • 基本「Container/HostOS」の構図でいくと 「Linux/Linux」である – ディストリビューションなど「ウワモノ」は選べる – 組み合わせで行くと… • Linux / Linux → ◎ (てか本来これしかない) • Linux / Windows or Mac → △ (仮想機が間に入り実現) • Windows / Linux → ✗ • Windows / Windows → △ ○〜 (実用的か言われると…)
  24. 24. Dockerの良いとされてるトコロ Dockerの「良い」とされてるトコロ (オレ調べ with Google先生) • OSSのフリーソフトである • 自ずとAsCodeになりやすい – Dockerfile前提なら – そうじゃない使い方ももちろん出来る • 起動が早い • 同一OS内の「環境の分離」 • リソースの有効活用
  25. 25. オレの「Dockerの良いトコロ」 ミウラにとっての「Dockerの良いトコロ」 • 環境の「いつでも蘇らせれる」フリーズドライ – 環境を伴った作業を 「止める」「再度始める」を簡易に出来る • 単一アプリの「本体を汚さない」環境の分離 – たとえば「特定言語の特定Webサーバ/Webアプリ」 で作業したい時とか • 例:Jenkins,Jekyll
  26. 26. オレの「Dockerの良いトコロ」 ミウラにとっての「Dockerの良いトコロ」 • 環境の「いつでも蘇らせれる」フリーズドライ – 環境を伴った作業を 「止める」「再度始める」を簡易に出来る • 単一アプリの「本体を汚さない」環境の分離 – たとえば「特定言語の特定Webサーバ/Webアプリ」 で作業したい時とか • 例:Jenkins,Jekyll あくまでも 「Linuxを クライアント利用してる人の 開発視点」 ですね… (今回のテーマとはちょっとちがうかも?)
  27. 27. さあ、 それら2つが 合わさる ということは?
  28. 28. 両方手に入る? • 利用実績とナレッジの多さ • 自身がJavaプログラムであり 洗練されている • プラグインが充実している • ビルドの手続きをAsCodeできる • 自ずとAsCodeになりやすい • 起動が早い • 同一OS内の「環境の分離」 • リソースの有効活用 • OSSのフリーソフトである Jenkins & Dockerの「良い」とされてるトコロ
  29. 29. 両方手に入る? • 利用実績とナレッジの多さ • 自身がJavaプログラムであり 洗練されている • プラグインが充実している • ビルドの手続きをAsCodeできる • 自ずとAsCodeになりやすい • 起動が早い • 同一OS内の「環境の分離」 • リソースの有効活用 • OSSのフリーソフトである Jenkins & Dockerの「良い」とされてるトコロ この全てが 手に入る? ※筆者はアホなのでandでなくorで考えています
  30. 30. Part.5 Jenkins & Docker
  31. 31. 本当は壇上なのもオカシイですが… ミウラは「我流」「最先端じゃない※」ので、 「世の中で広まってる情報(=Google先生の言うとおり)」 を調べてみました。 ※Jenkins界隈でDockerが盛り上がったのは3年前です • 一年以内に書かれた記事 • 日本語 & 英語のみ • 100例満たないくらい(厳密には数えてない) から • 目的別の使い方 • 起動方法として事例が多いもの • Dockerに関するプラグイン を「ある程度てきとうに」出してみました。
  32. 32. 目的別の使い方 目的別の使い方 ※上から「頻出順」になっていて、1.が半分以上でした 1.Jenkins自体をDockerで起動 2.ジョブ(パイプラインスクリプト)の中で 「使い捨てのクリーン環境」として 3.テスト/ビルドの「構成/Ver固定の特殊環境」として 4.「データ」や「外部環境」の「インスタント復元」用に ● DBサーバ(テストベッド) ● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体とし て 5.Jenkinsのスレーブとして ● テストの並列化 6.アプリのデプロイ先として 7.Jenkinsを「Dockerイメージのビルド」のために使う
  33. 33. Dockerに関するプラグイン Dockerに関するプラグイン ※こちらも上から頻出順 • CloudBees Docker Pipeline Plugin(docker-workflow-plugin) – パイプラインスクリプトに ”docker.image('image名').inside {なんか処理}” と書くことにより「その処理内を使い捨てのDockerコンテナで実行」出来るよ うにするプラグイン • docker-plugin – JenkinsスレーブをDockerで作成 – テストごとにコンテナを生成、破棄 • docker-custom-build-environment-plugin – 全体設定とジョブに設定することにより「ジョブ一式をDockerコンテ ナ内で実行」するように出来るプラグイン • docker-slaves(plugin) – ジョブ実行と同時に「複数コンテナを立ちあげる」プラグイン – “Side container”という概念でDBだったりWEB鯖だったりを上げてる 例あり
  34. 34. 起動方法として事例が多いもの 起動方法として事例が多いもの ※上から「頻出順」です 1.シェルからdockerコマンドでの起動 ● Jenkins外で(予め起動しとく) ● ジョブから「シェルの実行」で直orスクリプトで ● パイプラインスクリプトから”sh”で 2.Docker-workflow-pluginで使い捨てのDocker空間作成 3.slaveにDockerコンテナ使う ● docker-pluginで設定 ● Jenkins外で予め起動しておいて
  35. 35. 調べてみて… • 調べてみた「個人的な感触」として – 「Docker使うならこれ!」みたいな決め手な 「使い方」「ユースケース」とも確定してないぽい – 道具も「定番はこれ!」みたいなのは無いようだっ た • プラグインは(今後2.0系を使うことを考えれば)docker- pipline-pluginを覚えて、ソレ以外は「何が出来るか」 くらいを覚えておきたい – 世は結構「ナマのdockerコマンド」を書いている?
  36. 36. Part.6 調べた後、 考えたこと
  37. 37. さて… 1.Jenkins自体をDockerで起動 2.ジョブ(パイプラインスクリプト)の中で 「使い捨てのクリーン環境」として 3.テスト/ビルドの「構成/Ver固定の特殊環境」として 4.「データ」や「外部環境」の「インスタント復元」用に ● DBサーバ(テストベッド) ● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実 行体として 5.Jenkinsのスレーブとして ● テストの並列化 6.アプリのデプロイ先として 7.Jenkinsを「Dockerイメージのビルド」のために使う このリストから 「へー、いいじゃん 」♬ と思った方
  38. 38. さらに言うと… • (先のリストの中で)「お、いいじゃん♪自分の 現場(あるいは我が家)の問題に合致する…これ 使って解決しよう!」と、言う人 • そうなんですよ「自身に必要性が無い」なら 「ムリに使う必要はない」のです – 「新規性」だとか「時勢に乗って…」とかね – そもそも(俺含め)「今乗っかって」もそない新規性は …
  39. 39. ただ、こうじゃないですかね? • 以下の状況に引っかかる方… したい仕事(タスク)が 1.Linuxである 2.仮想機使いたい なら、Docker & Jenkinsを使えば 1.自動化 2.AsCode 3.バカっ早い立ち上がり の「ご利益(benefit)」が得られる のでは無いでしょうか?
  40. 40. Part.7 解説とデモ
  41. 41. No説明でしたしね… 1.Jenkins自体をDockerで起動 2.ジョブ(パイプラインスクリプト)の中で 「使い捨てのクリーン環境」として 3.テスト/ビルドの「構成/Ver固定の特殊環境」として 4.「データ」や「外部環境」の「インスタント復元」用に ● DBサーバ(テストベッド) ● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実 行体として 5.Jenkinsのスレーブとして ● テストの並列化 6.アプリのデプロイ先として 7.Jenkinsを「Dockerイメージのビルド」のために使う 例のリストから いくつか解説・ 実現していきます
  42. 42. 詳細の話を… 1.Jenkins自体をDockerで起動 2.ジョブ(パイプラインスクリプト)の中で 「使い捨てのクリーン環境」として 3.テスト/ビルドの「構成/Ver固定の特殊環境」として 4.「データ」や「外部環境」の「インスタント復元」用に ● DBサーバ(テストベッド) ● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実 行体として 5.Jenkinsのスレーブとして ● テストの並列化 6.アプリのデプロイ先として 7.Jenkinsを「Dockerイメージのビルド」のために使う これとこれは やめときます (「以前ハマった」のと 「今回必要ない感」 から)
  43. 43. 対象の アプリケーション
  44. 44. 対象のアプリケーションの紹介 • 単一機能の簡単なWebアプリケーション – 機能的 • 勤怠データを月選択で表示し、帳票(ods)に出しDL出来る – 構成的 • RDBMS + Webのアプリ、ブラウザでアクセス • Java8,SpringBoot,MySQL,JopenDocument(ods操作) MySQL The InternetLocal 以前の発表 のデモにて使用したアプリ 詳しくはそちらを (動画もあります)
  45. 45. 作成したい ビルド・デプロイ パイプライン
  46. 46. 作成したいパイプラインの設計 Java8を使った テスト Java9を 使ったテスト Java8で実行体 (jar)ビルド テストサーバ 立上げ&デプロイ SeleniumServer 使った画面テスト ブランチごと デプロイサーバ 立ちあげ ブランチごと デプロイサーバに デプロイ&公開 Docker コンテナ内で Docker コンテナ内で Docker コンテナ内で Docker コンテナとして Docker コンテナを Serverにして Docker コンテナとして Dockerイメージ ビルド (Dockerfileの) Git banch push (プロダクトの) Git banch push 2.使い捨てクリーン環境 3.構成/Ver固定の特殊環境 5.? テスト並列化 7.Dockerイメージのビルド 2.使い捨てクリーン環境 4.x 遠隔画面テストの実行体 6.アプリのデプロイ先 4.環境インスタント復元(DB) 6.アプリのデプロイ先
  47. 47. デモの情報 • デモ –今回使用したプログラム • https://github.com/exemplary-buildpipeline-projects/studyosaka8-jenkins-docker-app • https://github.com/exemplary-buildpipeline-projects/studyosaka8-jenkins-docker-env –デモの「開始時」条件 • Jenkinsは「インストール直後」の状態 • Jenkinsは「プラグインインストール済み」 「ジョブも作成された」状態から • Dockerは「コマンドが打てる状態」 – 無論Jenkinsのジョブからも実行可能 • パイプラインスクリプト(Jenkinsfile)は「既に 作成した状態」から始まる – Jenkinsのジョブを実行が主なデモ内容
  48. 48. パイプラインのデモ実行 • デモ
  49. 49. Part.8 まとめ …でもない何か
  50. 50. ありがとうございました 本当は「Jenkins&Docker」はもっと凄い! …のですけど、俺レベルではここまでです。 「なーんや、しょーもな」 「Dockerって大したことないやん」 と思った人は「Jenkins&Docker」が別に必要 じゃなかった人だとおもいます。 ただ、逆に「おお、良いかも?」って思った方 は「この後すぐ!くらいの勢いで!」やってみ ることをおすすめします♪ (例えば会社でふんぞり返って「もっと高度なことは出来んのかチミィ」みたいな人が居ても「入門を経ないと人が育たないし、その組織に根付かない」からその時点でもうムリやし、必要性 も無く投資する気がないくせに「カッコつけて「体面」と「成果のエエトコだけとろう」なんてハナシ、どちらかというと「裏方と技術者を楽にする」Dockerには余り向いていないと思うし。)
  51. 51. まとめ …でもなくて 「一方的な主張」
  52. 52. 一方的な主張 • Dockerは俺が好きだから使ってくれ! – 今回調べてますます好きに成った – 俺もこれからは「世の一般系」とか「オーケストレー ション」とか、次のレベルに行きたい! – そのためにも「全ての現場にDocker標準装備」くらい の普及を • Jenkins&Dockerは相性良い(ソレ用の考慮があ る)のでこれもおすすめ! – プラグインも事例もあるよ – 使用用途はわりかし「アイディア次第」で 「低コスト」になること多し
  53. 53. てなこって
  54. 54. てなこって 「JenkinsとDocker」 ってどうなんすかね? 良い感じです?
  55. 55. てなこって 「JenkinsとDocker」 ってどうなんすかね? 良い感じです? 知らんけど、 オレは使うよ!

×