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

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