O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

20.114 visualizações

Publicada em

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

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

Publicada em: Software
  • Seja o primeiro a comentar

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」 ってどうなんすかね? 良い感じです? 知らんけど、 オレは使うよ!

×