29 - たびえもん/夢をかなえる自由な旅 ...tabiiku.org/tabiemon/tsushin/037.pdf · 抹茶オレ 550円 春にふさわしい若草色の 優しい色、優しい味わい!
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
-
Upload
miura-kazuhito -
Category
Software
-
view
2.631 -
download
0
Transcript of JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの?言うてるオレもわからんわ〜 〜
第8回大阪Jenkins勉強会Ver 0.1
Part.1
アンタだれ?
自己紹介
• 通称:みうみう,「なんで来たん?」氏
• Twitter:@kazuhito_m
• Github:kazuhito-m
• 老害度:39歳、独身、意識低い系
• 職業:プログラマ(SIer、ビジネスアプリ属),自動家(オートメータ)
– フリーランス,屋号「みうらさんとこ」
• 好きなもの:自動化,「継続的なんとか」
– CI/CDとか大好物
– 「楽する」ためには「苦労は厭わない」
三浦 一仁(ミウラ カズヒト)
自己紹介
• 通称:みうみう,「なんで来たん?」氏
• Twitter:@kazuhito_m
• Github:kazuhito-m
• 老害度:38歳、独身、意識低い系
• 職業:プログラマ(SIer、ビジネスアプリ属),自動家(オートメータ)
– フリーランス,屋号「みうらさんとこ」
• 好きなもの:自動化,「継続的なんとか」
– CI/CDとか大好物
– 「楽する」ためには「苦労は厭わない」
三浦 一仁(ミウラ カズヒト)
最近は…
ダイエット芸人です。
Part.2
前置き
注意今回のハナシは…
• 完全我流
• (世界に照らして)正しいこと言うてる確証が無い
という「総じて言うと”嘘ばっかり”」なので
• Jenkins警察
• Docker警察
• Docker & Jenkins警察
の方、居られましたら「つっこみは発表終わった後」に、お願いします。
対象外のハナシ
今回、「お話しない内容」
• ✗Jenkins/Dockerの「メカニズム」の話
–○「使う側」の「用途」「使い方」の話
• ✗「Windows系のDocker」の話
–○Linux(Onlyの)Dockerの話
トツゼンですがアンケートです
みなさんを知りたい
• みなさんは今日どんな感じですか?
①Jenkinsの知識は無い(今からのため来た)
②Dockerの知識が無い(今からのため来た)
③DockerとJenkinsの組み合わせはよく判らん
④知ってるから「ツッコミ」に来た
Part.3
ナンデキタン?(本日の目的)
最近、よう聞かれるん
です…
わしゃ素人じゃちゅうに…
「JenkinsとDocker」ってどうなんすかね?良い感じです?
わしゃ素人じゃちゅうに…
「JenkinsとDocker」ってどうなんすかね?良い感じです?知らんがな。
そもそも何聞いてるかわからんし、ワシも「我流で始めたトコ」じゃ
じゃあそれこそ「なんできたん?」とか言うと「発表終わってまう」ので…
• ググッて調べたこと(付け焼き刃、確証無し)
• 自身の経験(我流)
を元に、皆様には
とっさに使える基礎英語Jenkins&Docker
的なのを「知ったかぶりしていただけるような何か」を持って帰って頂こうと来ました。
Part.4
まずは確認
Jenkinsって?
Jenkinsとは
•Jenkinsとは
Jenkinsとは
•Jenkinsとは割愛
Jenkinsの良いとされてるトコロ
Jenkinsの「良い」とされてるトコロ(オレ調べ with Google先生)
• OSSのフリーソフトである
• 利用実績とナレッジの多さ
• 自身がJavaプログラムであり洗練されている– 「Javaのプログラム」に関するケアは手厚い
• プラグインが充実している
• ビルドの手続きをAsCodeできる– 2.0からの特性
オレの「Jenkinsの良いトコロ」
ミウラにとっての「Jenkinsの良いトコロ」
•自動化!•めっちゃ好き!• 超絶閉鎖空間でも使える
Dockerって?
Dockerとは
•Dockerとは割愛ですが少しだけ説明を…
Dockerの特性
Dockerの特性として…
• 基本「Container/HostOS」の構図でいくと「Linux/Linux」である–ディストリビューションなど「ウワモノ」は選べる
– 組み合わせで行くと…• Linux / Linux → ◎ (てか本来これしかない)
• Linux / Windows or Mac → △ (仮想機が間に入り実現)
• Windows / Linux → ✗• Windows / Windows → △ ○ 〜 (実用的か言われると…)
Dockerの良いとされてるトコロ
Dockerの「良い」とされてるトコロ(オレ調べ with Google先生)
• OSSのフリーソフトである
• 自ずとAsCodeになりやすい– Dockerfile前提なら
– そうじゃない使い方ももちろん出来る
• 起動が早い
• 同一OS内の「環境の分離」
• リソースの有効活用
オレの「Dockerの良いトコロ」
ミウラにとっての「Dockerの良いトコロ」
• 環境の「いつでも蘇らせれる」フリーズドライ–環境を伴った作業を「止める」「再度始める」を簡易に出来る
• 単一アプリの「本体を汚さない」環境の分離– たとえば「特定言語の特定Webサーバ/Webアプリ」で作業したい時とか
• 例:Jenkins,Jekyll
オレの「Dockerの良いトコロ」
ミウラにとっての「Dockerの良いトコロ」
• 環境の「いつでも蘇らせれる」フリーズドライ–環境を伴った作業を「止める」「再度始める」を簡易に出来る
• 単一アプリの「本体を汚さない」環境の分離– たとえば「特定言語の特定Webサーバ/Webアプリ」で作業したい時とか
• 例:Jenkins,Jekyll
あくまでも「Linuxを
クライアント利用してる人の開発視点」ですね…
(今回のテーマとはちょっとちがうかも?)
さあ、それら2つが
合わさるということは?
両方手に入る?
• 利用実績とナレッジの多さ
• 自身がJavaプログラムであり洗練されている
• プラグインが充実している
• ビルドの手続きをAsCodeできる
• 自ずとAsCodeになりやすい
• 起動が早い
• 同一OS内の「環境の分離」
• リソースの有効活用
• OSSのフリーソフトである
Jenkins & Dockerの「良い」とされてるトコロ
両方手に入る?
• 利用実績とナレッジの多さ
• 自身がJavaプログラムであり洗練されている
• プラグインが充実している
• ビルドの手続きをAsCodeできる
• 自ずとAsCodeになりやすい
• 起動が早い
• 同一OS内の「環境の分離」
• リソースの有効活用
• OSSのフリーソフトである
Jenkins & Dockerの「良い」とされてるトコロ
この全てが手に入る?
※筆者はアホなのでandでなくorで考えています
Part.5
Jenkins & Docker
本当は壇上なのもオカシイですが…ミウラは「我流」「最先端じゃない※」ので、「世の中で広まってる情報(=Google先生の言うとおり)」を調べてみました。※Jenkins界隈でDockerが盛り上がったのは3年前です
• 一年以内に書かれた記事
• 日本語 & 英語のみ
• 100例満たないくらい(厳密には数えてない)
から
• 目的別の使い方
• 起動方法として事例が多いもの
• Dockerに関するプラグイン
を「ある程度てきとうに」出してみました。
目的別の使い方目的別の使い方
※上から「頻出順」になっていて、1.が半分以上でした
1.Jenkins自体をDockerで起動
2.ジョブ(パイプラインスクリプト)の中で「使い捨てのクリーン環境」として
3.テスト/ビルドの「構成/Ver固定の特殊環境」として
4.「データ」や「外部環境」の「インスタント復元」用に● DBサーバ(テストベッド)● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体として
5.Jenkinsのスレーブとして● テストの並列化
6.アプリのデプロイ先として
7.Jenkinsを「Dockerイメージのビルド」のために使う
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鯖だったりを上げてる例あり
起動方法として事例が多いもの
起動方法として事例が多いもの
※上から「頻出順」です
1.シェルからdockerコマンドでの起動● Jenkins外で(予め起動しとく)● ジョブから「シェルの実行」で直orスクリプトで●パイプラインスクリプトから”sh”で
2.Docker-workflow-pluginで使い捨てのDocker空間作成
3.slaveにDockerコンテナ使う● docker-pluginで設定● Jenkins外で予め起動しておいて
調べてみて…
• 調べてみた「個人的な感触」として– 「Docker使うならこれ!」みたいな決め手な「使い方」「ユースケース」とも確定してないぽい
–道具も「定番はこれ!」みたいなのは無いようだった
• プラグインは(今後2.0系を使うことを考えれば)docker-pipline-pluginを覚えて、ソレ以外は「何が出来るか」くらいを覚えておきたい
– 世は結構「ナマのdockerコマンド」を書いている?
Part.6
調べた後、
考えたこと
さて…
1.Jenkins自体をDockerで起動
2.ジョブ(パイプラインスクリプト)の中で「使い捨てのクリーン環境」として
3.テスト/ビルドの「構成/Ver固定の特殊環境」として
4.「データ」や「外部環境」の「インスタント復元」用に● DBサーバ(テストベッド)● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体として
5.Jenkinsのスレーブとして● テストの並列化
6.アプリのデプロイ先として
7.Jenkinsを「Dockerイメージのビルド」のために使う
このリストから
「へー、いいじゃん 」♬と思った方
さらに言うと…
• (先のリストの中で)「お、いいじゃん♪自分の現場(あるいは我が家)の問題に合致する…これ使って解決しよう!」と、言う人
• そうなんですよ「自身に必要性が無い」なら「ムリに使う必要はない」のです– 「新規性」だとか「時勢に乗って…」とかね
– そもそも(俺含め)「今乗っかって」もそない新規性は…
ただ、こうじゃないですかね?• 以下の状況に引っかかる方…
したい仕事(タスク)が
1.Linuxである
2.仮想機使いたい
なら、Docker & Jenkinsを使えば
1.自動化
2.AsCode
3.バカっ早い立ち上がりの「ご利益(benefit)」が得られる
のでは無いでしょうか?
Part.7
解説とデモ
No説明でしたしね…
1.Jenkins自体をDockerで起動
2.ジョブ(パイプラインスクリプト)の中で「使い捨てのクリーン環境」として
3.テスト/ビルドの「構成/Ver固定の特殊環境」として
4.「データ」や「外部環境」の「インスタント復元」用に● DBサーバ(テストベッド)● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体として
5.Jenkinsのスレーブとして● テストの並列化
6.アプリのデプロイ先として
7.Jenkinsを「Dockerイメージのビルド」のために使う
例のリストから
いくつか解説・実現していきます
詳細の話を…
1.Jenkins自体をDockerで起動
2.ジョブ(パイプラインスクリプト)の中で「使い捨てのクリーン環境」として
3.テスト/ビルドの「構成/Ver固定の特殊環境」として
4.「データ」や「外部環境」の「インスタント復元」用に● DBサーバ(テストベッド)● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体として
5.Jenkinsのスレーブとして● テストの並列化
6.アプリのデプロイ先として
7.Jenkinsを「Dockerイメージのビルド」のために使う
これとこれはやめときます
(「以前ハマった」のと「今回必要ない感」
から)
対象のアプリケーション
対象のアプリケーションの紹介• 単一機能の簡単なWebアプリケーション
–機能的• 勤怠データを月選択で表示し、帳票(ods)に出しDL出来る
–構成的• RDBMS + Webのアプリ、ブラウザでアクセス
• Java8,SpringBoot,MySQL,JopenDocument(ods操作)
MySQL
The InternetLocal
以前の発表
のデモにて使用したアプリ
詳しくはそちらを(動画もあります)
作成したいビルド・デプロイ
パイプライン
作成したいパイプラインの設計
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.アプリのデプロイ先
デモの情報
• デモ–今回使用したプログラム
• 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のジョブを実行が主なデモ内容
パイプラインのデモ実行• デモ
Part.8
まとめ…でもない何か
ありがとうございました
本当は「Jenkins&Docker」はもっと凄い!
…のですけど、俺レベルではここまでです。
「なーんや、しょーもな」「Dockerって大したことないやん」と思った人は「Jenkins&Docker」が別に必要じゃなかった人だとおもいます。
ただ、逆に「おお、良いかも?」って思った方は「この後すぐ!くらいの勢いで!」やってみることをおすすめします♪
(例えば会社でふんぞり返って「もっと高度なことは出来んのかチミィ」みたいな人が居ても「入門を経ないと人が育たないし、その組織に根付かない」からその時点でもうムリやし、必要性も無く投資する気がないくせに「カッコつけて「体面」と「成果のエエトコだけとろう」なんてハナシ、どちらかというと「裏方と技術者を楽にする」Dockerには余り向いていないと思うし。)
まとめ…でもなくて
「一方的な主張」
一方的な主張
• Dockerは俺が好きだから使ってくれ!– 今回調べてますます好きに成った
–俺もこれからは「世の一般系」とか「オーケストレーション」とか、次のレベルに行きたい!
– そのためにも「全ての現場にDocker標準装備」くらいの普及を
• Jenkins&Dockerは相性良い(ソレ用の考慮がある)のでこれもおすすめ!– プラグインも事例もあるよ
– 使用用途はわりかし「アイディア次第」で「低コスト」になること多し
てなこって
てなこって
「JenkinsとDocker」ってどうなんすかね?良い感じです?
てなこって
「JenkinsとDocker」ってどうなんすかね?良い感じです?
知らんけど、オレは使うよ!