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

55
JenkinsとDocker って何が良いの? 言うてるオレもわからんわ 第8回大阪Jenkins勉強会 Ver 0.1

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

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

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

第8回大阪Jenkins勉強会Ver 0.1

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

Part.1

アンタだれ?

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

自己紹介

• 通称:みうみう,「なんで来たん?」氏

• Twitter:@kazuhito_m

• Github:kazuhito-m

• 老害度:39歳、独身、意識低い系

• 職業:プログラマ(SIer、ビジネスアプリ属),自動家(オートメータ)

– フリーランス,屋号「みうらさんとこ」

• 好きなもの:自動化,「継続的なんとか」

– CI/CDとか大好物

– 「楽する」ためには「苦労は厭わない」

三浦 一仁(ミウラ カズヒト)

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

自己紹介

• 通称:みうみう,「なんで来たん?」氏

• Twitter:@kazuhito_m

• Github:kazuhito-m

• 老害度:38歳、独身、意識低い系

• 職業:プログラマ(SIer、ビジネスアプリ属),自動家(オートメータ)

– フリーランス,屋号「みうらさんとこ」

• 好きなもの:自動化,「継続的なんとか」

– CI/CDとか大好物

– 「楽する」ためには「苦労は厭わない」

三浦 一仁(ミウラ カズヒト)

最近は…

ダイエット芸人です。

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

Part.2

前置き

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

注意今回のハナシは…

• 完全我流

• (世界に照らして)正しいこと言うてる確証が無い

という「総じて言うと”嘘ばっかり”」なので

• Jenkins警察

• Docker警察

• Docker & Jenkins警察

の方、居られましたら「つっこみは発表終わった後」に、お願いします。

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

対象外のハナシ

今回、「お話しない内容」

• ✗Jenkins/Dockerの「メカニズム」の話

–○「使う側」の「用途」「使い方」の話

• ✗「Windows系のDocker」の話

–○Linux(Onlyの)Dockerの話

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

トツゼンですがアンケートです

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

みなさんを知りたい

• みなさんは今日どんな感じですか?

①Jenkinsの知識は無い(今からのため来た)

②Dockerの知識が無い(今からのため来た)

③DockerとJenkinsの組み合わせはよく判らん

④知ってるから「ツッコミ」に来た

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

Part.3

ナンデキタン?(本日の目的)

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

最近、よう聞かれるん

です…

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

わしゃ素人じゃちゅうに…

「JenkinsとDocker」ってどうなんすかね?良い感じです?

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

わしゃ素人じゃちゅうに…

「JenkinsとDocker」ってどうなんすかね?良い感じです?知らんがな。

そもそも何聞いてるかわからんし、ワシも「我流で始めたトコ」じゃ

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

じゃあそれこそ「なんできたん?」とか言うと「発表終わってまう」ので…

• ググッて調べたこと(付け焼き刃、確証無し)

• 自身の経験(我流)

を元に、皆様には

とっさに使える基礎英語Jenkins&Docker

的なのを「知ったかぶりしていただけるような何か」を持って帰って頂こうと来ました。

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

Part.4

まずは確認

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

Jenkinsって?

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

Jenkinsとは

•Jenkinsとは

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

Jenkinsとは

•Jenkinsとは割愛

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

Jenkinsの良いとされてるトコロ

Jenkinsの「良い」とされてるトコロ(オレ調べ with Google先生)

• OSSのフリーソフトである

• 利用実績とナレッジの多さ

• 自身がJavaプログラムであり洗練されている– 「Javaのプログラム」に関するケアは手厚い

• プラグインが充実している

• ビルドの手続きをAsCodeできる– 2.0からの特性

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

オレの「Jenkinsの良いトコロ」

ミウラにとっての「Jenkinsの良いトコロ」

•自動化!•めっちゃ好き!• 超絶閉鎖空間でも使える

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

Dockerって?

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

Dockerとは

•Dockerとは割愛ですが少しだけ説明を…

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

Dockerの特性

Dockerの特性として…

• 基本「Container/HostOS」の構図でいくと「Linux/Linux」である–ディストリビューションなど「ウワモノ」は選べる

– 組み合わせで行くと…• Linux / Linux → ◎ (てか本来これしかない)

• Linux / Windows or Mac → △ (仮想機が間に入り実現)

• Windows / Linux → ✗• Windows / Windows → △ ○ 〜 (実用的か言われると…)

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

Dockerの良いとされてるトコロ

Dockerの「良い」とされてるトコロ(オレ調べ with Google先生)

• OSSのフリーソフトである

• 自ずとAsCodeになりやすい– Dockerfile前提なら

– そうじゃない使い方ももちろん出来る

• 起動が早い

• 同一OS内の「環境の分離」

• リソースの有効活用

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

オレの「Dockerの良いトコロ」

ミウラにとっての「Dockerの良いトコロ」

• 環境の「いつでも蘇らせれる」フリーズドライ–環境を伴った作業を「止める」「再度始める」を簡易に出来る

• 単一アプリの「本体を汚さない」環境の分離– たとえば「特定言語の特定Webサーバ/Webアプリ」で作業したい時とか

• 例:Jenkins,Jekyll

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

オレの「Dockerの良いトコロ」

ミウラにとっての「Dockerの良いトコロ」

• 環境の「いつでも蘇らせれる」フリーズドライ–環境を伴った作業を「止める」「再度始める」を簡易に出来る

• 単一アプリの「本体を汚さない」環境の分離– たとえば「特定言語の特定Webサーバ/Webアプリ」で作業したい時とか

• 例:Jenkins,Jekyll

あくまでも「Linuxを

クライアント利用してる人の開発視点」ですね…

(今回のテーマとはちょっとちがうかも?)

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

さあ、それら2つが

合わさるということは?

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

両方手に入る?

• 利用実績とナレッジの多さ

• 自身がJavaプログラムであり洗練されている

• プラグインが充実している

• ビルドの手続きをAsCodeできる

• 自ずとAsCodeになりやすい

• 起動が早い

• 同一OS内の「環境の分離」

• リソースの有効活用

• OSSのフリーソフトである

Jenkins & Dockerの「良い」とされてるトコロ

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

両方手に入る?

• 利用実績とナレッジの多さ

• 自身がJavaプログラムであり洗練されている

• プラグインが充実している

• ビルドの手続きをAsCodeできる

• 自ずとAsCodeになりやすい

• 起動が早い

• 同一OS内の「環境の分離」

• リソースの有効活用

• OSSのフリーソフトである

Jenkins & Dockerの「良い」とされてるトコロ

この全てが手に入る?

※筆者はアホなのでandでなくorで考えています

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

Part.5

Jenkins & Docker

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

本当は壇上なのもオカシイですが…ミウラは「我流」「最先端じゃない※」ので、「世の中で広まってる情報(=Google先生の言うとおり)」を調べてみました。※Jenkins界隈でDockerが盛り上がったのは3年前です

• 一年以内に書かれた記事

• 日本語 & 英語のみ

• 100例満たないくらい(厳密には数えてない)

から

• 目的別の使い方

• 起動方法として事例が多いもの

• Dockerに関するプラグイン

を「ある程度てきとうに」出してみました。

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

目的別の使い方目的別の使い方

※上から「頻出順」になっていて、1.が半分以上でした

1.Jenkins自体をDockerで起動

2.ジョブ(パイプラインスクリプト)の中で「使い捨てのクリーン環境」として

3.テスト/ビルドの「構成/Ver固定の特殊環境」として

4.「データ」や「外部環境」の「インスタント復元」用に● DBサーバ(テストベッド)● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体として

5.Jenkinsのスレーブとして● テストの並列化

6.アプリのデプロイ先として

7.Jenkinsを「Dockerイメージのビルド」のために使う

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

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鯖だったりを上げてる例あり

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

起動方法として事例が多いもの

起動方法として事例が多いもの

※上から「頻出順」です

1.シェルからdockerコマンドでの起動● Jenkins外で(予め起動しとく)● ジョブから「シェルの実行」で直orスクリプトで●パイプラインスクリプトから”sh”で

2.Docker-workflow-pluginで使い捨てのDocker空間作成

3.slaveにDockerコンテナ使う● docker-pluginで設定● Jenkins外で予め起動しておいて

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

調べてみて…

• 調べてみた「個人的な感触」として– 「Docker使うならこれ!」みたいな決め手な「使い方」「ユースケース」とも確定してないぽい

–道具も「定番はこれ!」みたいなのは無いようだった

• プラグインは(今後2.0系を使うことを考えれば)docker-pipline-pluginを覚えて、ソレ以外は「何が出来るか」くらいを覚えておきたい

– 世は結構「ナマのdockerコマンド」を書いている?

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

Part.6

調べた後、

考えたこと

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

さて…

1.Jenkins自体をDockerで起動

2.ジョブ(パイプラインスクリプト)の中で「使い捨てのクリーン環境」として

3.テスト/ビルドの「構成/Ver固定の特殊環境」として

4.「データ」や「外部環境」の「インスタント復元」用に● DBサーバ(テストベッド)● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体として

5.Jenkinsのスレーブとして● テストの並列化

6.アプリのデプロイ先として

7.Jenkinsを「Dockerイメージのビルド」のために使う

このリストから

「へー、いいじゃん 」♬と思った方

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

さらに言うと…

• (先のリストの中で)「お、いいじゃん♪自分の現場(あるいは我が家)の問題に合致する…これ使って解決しよう!」と、言う人

• そうなんですよ「自身に必要性が無い」なら「ムリに使う必要はない」のです– 「新規性」だとか「時勢に乗って…」とかね

– そもそも(俺含め)「今乗っかって」もそない新規性は…

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

ただ、こうじゃないですかね?• 以下の状況に引っかかる方…

したい仕事(タスク)が

1.Linuxである

2.仮想機使いたい

なら、Docker & Jenkinsを使えば

1.自動化

2.AsCode

3.バカっ早い立ち上がりの「ご利益(benefit)」が得られる

のでは無いでしょうか?

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

Part.7

解説とデモ

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

No説明でしたしね…

1.Jenkins自体をDockerで起動

2.ジョブ(パイプラインスクリプト)の中で「使い捨てのクリーン環境」として

3.テスト/ビルドの「構成/Ver固定の特殊環境」として

4.「データ」や「外部環境」の「インスタント復元」用に● DBサーバ(テストベッド)● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体として

5.Jenkinsのスレーブとして● テストの並列化

6.アプリのデプロイ先として

7.Jenkinsを「Dockerイメージのビルド」のために使う

例のリストから

いくつか解説・実現していきます

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

詳細の話を…

1.Jenkins自体をDockerで起動

2.ジョブ(パイプラインスクリプト)の中で「使い捨てのクリーン環境」として

3.テスト/ビルドの「構成/Ver固定の特殊環境」として

4.「データ」や「外部環境」の「インスタント復元」用に● DBサーバ(テストベッド)● (超特殊環境として)簡易デスクトップ(VNC)遠隔画面テストの実行体として

5.Jenkinsのスレーブとして● テストの並列化

6.アプリのデプロイ先として

7.Jenkinsを「Dockerイメージのビルド」のために使う

これとこれはやめときます

(「以前ハマった」のと「今回必要ない感」

から)

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

対象のアプリケーション

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

対象のアプリケーションの紹介• 単一機能の簡単なWebアプリケーション

–機能的• 勤怠データを月選択で表示し、帳票(ods)に出しDL出来る

–構成的• RDBMS + Webのアプリ、ブラウザでアクセス

• Java8,SpringBoot,MySQL,JopenDocument(ods操作)

MySQL

The InternetLocal

以前の発表

のデモにて使用したアプリ

詳しくはそちらを(動画もあります)

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

作成したいビルド・デプロイ

パイプライン

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

作成したいパイプラインの設計

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.アプリのデプロイ先

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

デモの情報

• デモ–今回使用したプログラム

• 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のジョブを実行が主なデモ内容

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

パイプラインのデモ実行• デモ

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

Part.8

まとめ…でもない何か

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

ありがとうございました

本当は「Jenkins&Docker」はもっと凄い!

…のですけど、俺レベルではここまでです。

「なーんや、しょーもな」「Dockerって大したことないやん」と思った人は「Jenkins&Docker」が別に必要じゃなかった人だとおもいます。

ただ、逆に「おお、良いかも?」って思った方は「この後すぐ!くらいの勢いで!」やってみることをおすすめします♪

(例えば会社でふんぞり返って「もっと高度なことは出来んのかチミィ」みたいな人が居ても「入門を経ないと人が育たないし、その組織に根付かない」からその時点でもうムリやし、必要性も無く投資する気がないくせに「カッコつけて「体面」と「成果のエエトコだけとろう」なんてハナシ、どちらかというと「裏方と技術者を楽にする」Dockerには余り向いていないと思うし。)

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

まとめ…でもなくて

「一方的な主張」

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

一方的な主張

• Dockerは俺が好きだから使ってくれ!– 今回調べてますます好きに成った

–俺もこれからは「世の一般系」とか「オーケストレーション」とか、次のレベルに行きたい!

– そのためにも「全ての現場にDocker標準装備」くらいの普及を

• Jenkins&Dockerは相性良い(ソレ用の考慮がある)のでこれもおすすめ!– プラグインも事例もあるよ

– 使用用途はわりかし「アイディア次第」で「低コスト」になること多し

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

てなこって

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

てなこって

「JenkinsとDocker」ってどうなんすかね?良い感じです?

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

てなこって

「JenkinsとDocker」ってどうなんすかね?良い感じです?

知らんけど、オレは使うよ!