Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Yu Nobuoka
21,467 views
はてなにおける継続的デプロイメントの現状と Docker の導入
2015 年 1 月 11 日に開催された 「Jenkins ユーザ・カンファレンス 2015 東京」 での発表資料です。
Engineering
◦
Read more
109
Save
Share
Embed
Embed presentation
Download
Downloaded 126 times
1
/ 89
2
/ 89
3
/ 89
4
/ 89
5
/ 89
6
/ 89
7
/ 89
8
/ 89
9
/ 89
10
/ 89
11
/ 89
12
/ 89
13
/ 89
14
/ 89
15
/ 89
16
/ 89
17
/ 89
18
/ 89
19
/ 89
20
/ 89
21
/ 89
22
/ 89
23
/ 89
24
/ 89
25
/ 89
26
/ 89
27
/ 89
28
/ 89
29
/ 89
30
/ 89
31
/ 89
32
/ 89
33
/ 89
34
/ 89
35
/ 89
36
/ 89
37
/ 89
38
/ 89
39
/ 89
40
/ 89
41
/ 89
42
/ 89
43
/ 89
44
/ 89
45
/ 89
46
/ 89
47
/ 89
48
/ 89
49
/ 89
50
/ 89
51
/ 89
52
/ 89
53
/ 89
54
/ 89
55
/ 89
56
/ 89
57
/ 89
58
/ 89
59
/ 89
60
/ 89
61
/ 89
62
/ 89
63
/ 89
64
/ 89
65
/ 89
66
/ 89
67
/ 89
68
/ 89
69
/ 89
70
/ 89
71
/ 89
72
/ 89
73
/ 89
74
/ 89
75
/ 89
76
/ 89
77
/ 89
78
/ 89
79
/ 89
80
/ 89
81
/ 89
82
/ 89
83
/ 89
84
/ 89
85
/ 89
86
/ 89
87
/ 89
88
/ 89
89
/ 89
More Related Content
PDF
捕鯨!詳解docker
by
雄哉 吉田
PDF
アプリ屋もDockerをドカドカ使おう ~ Docker入門
by
Hori Tasuku
PDF
Docker入門: コンテナ型仮想化技術の仕組みと使い方
by
Yuichi Ito
PDF
Jenkins with Docker
by
Yahoo!デベロッパーネットワーク
PDF
Dockerと継続的インテグレーション
by
Yahoo!デベロッパーネットワーク
PPTX
Appsody でnodejsのアプリを立ち上げよう!
by
Daisuke Hiraoka
PDF
Introduce that Best practices for writing Dockerfiles
by
Yukiya Hayashi
PDF
Docker基礎+docker0.9, 0.10概要
by
Kazuyuki Mori
捕鯨!詳解docker
by
雄哉 吉田
アプリ屋もDockerをドカドカ使おう ~ Docker入門
by
Hori Tasuku
Docker入門: コンテナ型仮想化技術の仕組みと使い方
by
Yuichi Ito
Jenkins with Docker
by
Yahoo!デベロッパーネットワーク
Dockerと継続的インテグレーション
by
Yahoo!デベロッパーネットワーク
Appsody でnodejsのアプリを立ち上げよう!
by
Daisuke Hiraoka
Introduce that Best practices for writing Dockerfiles
by
Yukiya Hayashi
Docker基礎+docker0.9, 0.10概要
by
Kazuyuki Mori
What's hot
PDF
今だからこそ知りたい Docker Compose/Swarm 入門
by
Masahito Zembutsu
PDF
Dockerイメージの理解とコンテナのライフサイクル
by
Masahito Zembutsu
PDF
分散環境におけるDocker とオーケストレーション
by
Masahito Zembutsu
PDF
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
by
Ryo Nakamaru
PDF
DockerとDocker Hubの操作と概念
by
Masahito Zembutsu
PDF
はじめてのコンテナーDocker & Windows & Linux
by
Kazushi Kamegawa
PDF
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
by
gree_tech
PDF
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
by
Masahito Zembutsu
PPTX
Ansibleを使ってdockerコンテナをプロビジョニングする
by
Ryo Adachi
PDF
Dockerで開発環境をデリバる
by
Daigou Harada
PDF
Docker + Checkpoint/Restore
by
kawamuray
PPTX
開発環境をVagrantからdockerに移行してみた
by
pyar6329
PDF
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
by
Masahiro Nagano
PDF
Docker最新動向2017秋+セキュリティの落とし穴
by
Masahito Zembutsu
PDF
Dockerイメージ構築 実践テクニック
by
Emma Haruka Iwao
PDF
Vagrant & Dockerによるイマドキの開発環境構築
by
Nakazawa Yuichi
PDF
JAWS-UG コンテナ支部 Docker入門 ハンズオン
by
Ryo Nakamaru
PDF
【dots. IT勉強会】開発環境のDocker化
by
Yuki Kanazawa
PDF
Dockerについて
by
74th
PPTX
Docker地雷n本勝負
by
RyutaKoide
今だからこそ知りたい Docker Compose/Swarm 入門
by
Masahito Zembutsu
Dockerイメージの理解とコンテナのライフサイクル
by
Masahito Zembutsu
分散環境におけるDocker とオーケストレーション
by
Masahito Zembutsu
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
by
Ryo Nakamaru
DockerとDocker Hubの操作と概念
by
Masahito Zembutsu
はじめてのコンテナーDocker & Windows & Linux
by
Kazushi Kamegawa
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
by
gree_tech
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
by
Masahito Zembutsu
Ansibleを使ってdockerコンテナをプロビジョニングする
by
Ryo Adachi
Dockerで開発環境をデリバる
by
Daigou Harada
Docker + Checkpoint/Restore
by
kawamuray
開発環境をVagrantからdockerに移行してみた
by
pyar6329
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
by
Masahiro Nagano
Docker最新動向2017秋+セキュリティの落とし穴
by
Masahito Zembutsu
Dockerイメージ構築 実践テクニック
by
Emma Haruka Iwao
Vagrant & Dockerによるイマドキの開発環境構築
by
Nakazawa Yuichi
JAWS-UG コンテナ支部 Docker入門 ハンズオン
by
Ryo Nakamaru
【dots. IT勉強会】開発環境のDocker化
by
Yuki Kanazawa
Dockerについて
by
74th
Docker地雷n本勝負
by
RyutaKoide
Viewers also liked
PDF
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
by
Masahito Zembutsu
PDF
Docker with RHEL7 技術勉強会
by
Etsuji Nakai
PDF
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
by
Kunihiro TANAKA
PPTX
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
by
VirtualTech Japan Inc.
PDF
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
by
Masahito Zembutsu
PDF
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
by
さくらインターネット株式会社
PDF
Dockerの基本と応用~快適コンテナライフを実現するArukas~
by
Masahito Zembutsu
PPTX
Dockerの基本的な話
by
gree_tech
PDF
8a1#19[はじめてのdocker] 公開版
by
Kamon Nobuchika
PPTX
paizaのオンラインジャッジを支えるDockerとその周辺
by
paiza
PPTX
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
by
Kunihiro TANAKA
PPTX
Dockerのネットワークについて
by
Nobuyuki Matsui
PDF
Docker事始めと最新動向 2015年6月
by
Emma Haruka Iwao
PDF
Docker技術情報アップデート 2015年7月号
by
Masahito Zembutsu
PDF
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
by
Emma Haruka Iwao
PDF
Docker hands on nifty sakura jul19
by
Masahito Zembutsu
PDF
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
by
Masahito Zembutsu
PPTX
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
by
Nobuyuki Matsui
PPTX
Docker Community Edition & Enterprise Edition
by
Creationline,inc.
PDF
What's New in Docker Enterprise Edition (in Japanese)
by
Creationline,inc.
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
by
Masahito Zembutsu
Docker with RHEL7 技術勉強会
by
Etsuji Nakai
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
by
Kunihiro TANAKA
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
by
VirtualTech Japan Inc.
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
by
Masahito Zembutsu
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
by
さくらインターネット株式会社
Dockerの基本と応用~快適コンテナライフを実現するArukas~
by
Masahito Zembutsu
Dockerの基本的な話
by
gree_tech
8a1#19[はじめてのdocker] 公開版
by
Kamon Nobuchika
paizaのオンラインジャッジを支えるDockerとその周辺
by
paiza
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
by
Kunihiro TANAKA
Dockerのネットワークについて
by
Nobuyuki Matsui
Docker事始めと最新動向 2015年6月
by
Emma Haruka Iwao
Docker技術情報アップデート 2015年7月号
by
Masahito Zembutsu
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
by
Emma Haruka Iwao
Docker hands on nifty sakura jul19
by
Masahito Zembutsu
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
by
Masahito Zembutsu
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
by
Nobuyuki Matsui
Docker Community Edition & Enterprise Edition
by
Creationline,inc.
What's New in Docker Enterprise Edition (in Japanese)
by
Creationline,inc.
Similar to はてなにおける継続的デプロイメントの現状と Docker の導入
PDF
Jenkins 再入門
by
Jumpei Miyata
PDF
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
by
R S
PPTX
Jenkins x Kubernetesが簡単だと思ったら大変だった話
by
Masaki Yamamoto
PPTX
Jenkins 2.0 (日本語)
by
Kohsuke Kawaguchi
PPTX
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
by
Yukihiko SAWANOBORI
PDF
成長を加速する minne の技術基盤戦略
by
Hiroshi SHIBATA
PDF
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
by
Masaya Aoyama
PDF
恋するJenkins
by
Hiroshi Nakao
PDF
恋に落ちるデプロイツール
by
totty jp
PDF
Capistrano
by
Yasuharu Fukuda
PPTX
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol2
by
近藤 繁延
PDF
Jenkinsについて
by
Satoshi Namai
PDF
ドリコムJenkins勉強会資料
by
Go Sueyoshi (a.k.a sue445)
PDF
CIBC workshop by imagire
by
Takashi Imagire
PDF
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
by
decode2016
PPTX
Jenkins User Conference 東京 2015
by
Kohsuke Kawaguchi
PPTX
第六回Jenkins勉強会
by
Kohsuke Kawaguchi
PDF
Mina 20130417
by
Naotoshi Seo
PDF
Jenkinsで始める継続的デリバリーと実践の道程
by
Masanori Satoh
PPTX
CIのもたらす世界
by
Tatsuhito Kato
Jenkins 再入門
by
Jumpei Miyata
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
by
R S
Jenkins x Kubernetesが簡単だと思ったら大変だった話
by
Masaki Yamamoto
Jenkins 2.0 (日本語)
by
Kohsuke Kawaguchi
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
by
Yukihiko SAWANOBORI
成長を加速する minne の技術基盤戦略
by
Hiroshi SHIBATA
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
by
Masaya Aoyama
恋するJenkins
by
Hiroshi Nakao
恋に落ちるデプロイツール
by
totty jp
Capistrano
by
Yasuharu Fukuda
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol2
by
近藤 繁延
Jenkinsについて
by
Satoshi Namai
ドリコムJenkins勉強会資料
by
Go Sueyoshi (a.k.a sue445)
CIBC workshop by imagire
by
Takashi Imagire
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
by
decode2016
Jenkins User Conference 東京 2015
by
Kohsuke Kawaguchi
第六回Jenkins勉強会
by
Kohsuke Kawaguchi
Mina 20130417
by
Naotoshi Seo
Jenkinsで始める継続的デリバリーと実践の道程
by
Masanori Satoh
CIのもたらす世界
by
Tatsuhito Kato
More from Yu Nobuoka
PDF
Android アプリ開発における Gradle ビルドシステム
by
Yu Nobuoka
PDF
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
by
Yu Nobuoka
PDF
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
by
Yu Nobuoka
PDF
TypeScript 言語処理系ことはじめ
by
Yu Nobuoka
PDF
Java による Web アプリケーションのプロトタイプのために最近使っている構成
by
Yu Nobuoka
PDF
Windows ストアアプリのつくりかた (JS + HTML + CSS)
by
Yu Nobuoka
PDF
WebSocket Protocol と Plack::Middleware::WebSocket
by
Yu Nobuoka
PDF
GUI アプリケーションにおける MVC
by
Yu Nobuoka
PDF
GIF と LZW 圧縮と GifWriter.js
by
Yu Nobuoka
PDF
はてなにおける Android アプリのソフトウェアテスト
by
Yu Nobuoka
PDF
AndroidJUnitRunner で JUnit 4 形式のテストに移行
by
Yu Nobuoka
Android アプリ開発における Gradle ビルドシステム
by
Yu Nobuoka
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
by
Yu Nobuoka
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
by
Yu Nobuoka
TypeScript 言語処理系ことはじめ
by
Yu Nobuoka
Java による Web アプリケーションのプロトタイプのために最近使っている構成
by
Yu Nobuoka
Windows ストアアプリのつくりかた (JS + HTML + CSS)
by
Yu Nobuoka
WebSocket Protocol と Plack::Middleware::WebSocket
by
Yu Nobuoka
GUI アプリケーションにおける MVC
by
Yu Nobuoka
GIF と LZW 圧縮と GifWriter.js
by
Yu Nobuoka
はてなにおける Android アプリのソフトウェアテスト
by
Yu Nobuoka
AndroidJUnitRunner で JUnit 4 形式のテストに移行
by
Yu Nobuoka
はてなにおける継続的デプロイメントの現状と Docker の導入
1.
id:nobuoka (@nobuoka) 株式会社はてな 2015-01-11 Jenkins
ユーザ・カンファレンス 2015 東京 はてなにおける継続的デプロイメント の現状と Docker の導入
2.
id:nobuoka Blog : http://vividcode.hatenablog.com/ Twitter
: https://twitter.com/nobuoka GitHub : https://github.com/nobuoka ● 2012 – 2014 : はてなブックマーク – ブクマ本体、アプリ、Presso など ● 2014 – 現在 : 少年ジャンプルーキー – WJ 編集部が運営するマンガ投稿サービス ● 株式会社はてな ● アプリケーションエンジニア
3.
今日の話 1.はてなのサービス開発と Jenkins ● 全社的な話。 2.ジャンプルーキーの開発フローと
Jenkins ● ジャンプルーキーのチームを例に開発フローを 紹介。 3.Docker コンテナによる確認環境と Jenkins ● 動作確認用の web アプリケーション。 ● Jenkins 上で Docker ビルド。
4.
はてなのサービス開発と Jenkins はてな全体におけるサービス開発と Jenkins との関わりについて紹介し ます。
5.
はてなのサービス など
6.
ブックマーク・ブログなど ● Perl ● はてなのサービス開発の主流 ●
コンパイルのプロセスは基本的に不要 – JS や CSS の静的ファイルの変換などはある ● テストの実行や静的ファイル生成、デプロイ などで Jenkins を活用 ● 少年ジャンプルーキーもこの流れ – 後で詳しく
7.
参考: ブログの開発プロセス https://speakerdeck.com/shibayu36/hate naburogutimufalsekai-fa-hurotogithub https://speakerdeck.com/onishi/hatena -blog-development-flow
8.
Mackerel ● サーバー管理サービス ● 2014
年リリース ● Scala ● サーバーサイドのアプリケーションを動かす ためにコンパイルが必要 – これまでのはてなのサービスとは違って Jenkins でコンパイルをしたりしてる
9.
Mackerel
10.
参考: Mackerel の話
(Jenkins の話も少し) https://speakerdeck.com/hakobe/scala-in-perl-company
11.
各サービスと Jenkins ● それぞれのサービスで
Jenkins を活用 ● 昔: master/slave 構成の Jenkins 1 組 ● → 最近はサービスごとに Jenkins を用意 ● サービスごとに異なる環境 – あるサービス用に変更を加えると別のサービス のテストが動かなくなる、とか ● 関係者が少ない方がメンテナンスしやすい
12.
なんのための Jenkins か ●
ソフトウェア進化を継続するため – はてなダイアリーは 10 年超 – はてなブックマークは 10 年 ● テスト、ビルド、デプロイ ● 意識しなくてもテストが実行される環境 ● 面倒な手順の自動化
13.
特にテスト ● 開発時は各自のマシンで – OS
X、Linux、Windows ● 開発者のマシン上ではテストに通っても実際 の環境では動かない可能性 ● → 本番に近い環境でのテスト実行 ● 面倒なのでいちいち全テスト実行しない ● → 自動でのテスト実行
15.
Jenkins の管理 ● Chef
で Jenkins の環境を構築 – 本番サーバーも Chef で構築 ● Jenkins 自体だけでなく、各プロジェクトのビ ルドやテストに必要なコマンドやホストの設 定も Chef で行う ● 本番サーバーと同等の環境を実現
16.
Jenkins 使用の方針 ● Jenkins
の設定を複雑にしない – 秘伝のタレ問題 – コマンド一つで処理を実行できるように – 環境準備とかも ● 例 : 処理の内容は Shell スクリプトファイル に記述してプロジェクトのリポジトリに入れる
17.
スマートフォンアプリと Jenkins ● Android
アプリ → Gradle が標準になりビ ルドやテストの自動化がしやすく ● Jenkins 上でのテスト実行 – Android Emulator Plugin – Android SDK は用意してくれる – 必要なコンポーネントは? → Gradle プラグイ ンでインストール可能! ● iOS アプリも含め、これからという段階
18.
ジャンプルーキーの開発プロセスと Jenkins はてなのサービス開発プロセスの中での Jenkins の役割を 具体的に紹介。
20.
少年ジャンプルーキー ● ユーザーによるマンガ投稿・公開サービス ● 2014
年 11 月末にリリース ● 少年ジャンプ編集部 ● 漫画雑誌アプリ 「少年ジャンプ+」 内
21.
少年ジャンプルーキー ● ユーザーによるマンガ投稿・公開サービス ● 2014
年 11 月末にリリース ● 少年ジャンプ編集部 ● 漫画雑誌アプリ 「少年ジャンプ+」 内 2014 年末
22.
少年ジャンプルーキーの開発・運用 ● 開発・運用 :
はてな ● ディレクター 1 人、デザイナ 1 人 ● エンジニア数名 (開発・運用) ● 最近のはてなでの開発・運用を踏襲・改善
23.
サーバーサイド ● 言語: Perl –
ビルドプロセスは不要 ● データストレージ – MySQL – Redis – Amazon S3
24.
フロントエンド ● HTML は生 ●
TypeScript – TypeScript → JS → minified JS – ビルドプロセスが必要 (開発者の手元 + Jenkins) ● LESS – LESS → CSS – ビルドプロセスが必要 (開発者の手元)
25.
ビルドツールやデプロイツール ● ビルドツール: gulp
(Node.js) – TS → JS や LESS → CSS – JS テスト実行 – 静的ファイルにダイジェストハッシュ付与 ● デプロイ: Capistrano 3 (Ruby) ● バージョン管理: Git – 中央リポジトリは GitHub;Enterprise
26.
開発に用いるツール ● はてなグループ :
日記 + Wiki システム – ドキュメント管理 ● Slack : チャットツール ● Trello : タスク管理 ● GitHub;Enterprise : コード管理 (レビュー 等) ● Jenkins
27.
開発プロセス概要 ● スクラム、2 週間
1 スプリント ● リリースは毎週 – 自社サービスではないのでどんどん出すという 感じではない – だが、常に最新の機能をリリースできる状態を 保つ ● 今回はタスク管理などにはあまり触れずに 開発者目線で
28.
master staging devel features ブランチモデル リリース
29.
ブランチモデル ● master ブランチ –
本番反映対象 ● staging 系列ブランチ (例: staging-20150101-000000) – 本番反映ごとに別ブランチ名で毎回作成 ● devel ブランチ – リリース可能なものをマージ ● features – 開発ブランチ
30.
ブランチモデル ● Git-flow のブランチモデル ●
devel ブランチは常にリリース可能な状態に 保つ ● リリース済みの機能の緊急修正は master ブランチからブランチを切って行う
31.
新機能開発、バグ修正
32.
master staging devel features ブランチを作成して開発開始
33.
pull request を作成 ●
開発中に立てるかどうかは任意 – コードレビュー時には必須 ● 開発中の様子が見えやすい ● 開発中のコードについて議論しやすい ● Jenkins によるテストの結果の可視化
34.
開発時の Jenkins の役割 ●
Push されるごとにライブラリ更新、JS minify – 必要な場合のみ – 結果をコミット ● Push されるごとにテストを実行 – 失敗時には通知する – Slack、GH;E ● 動作確認のために開発用ホストにデプロイ (Docker 使用、後述)
35.
Push されるごとにビルド実行 ● Jenkins
の GitHub Plugin ● GH;E の Server Hook ● 処理内容は script/jenkins.sh に記述 – Static ファイルの変換処理 → コミット、or – テスト実行 (Perl、JS)
36.
GH;E のコミットへの通知 ● Shell
スクリプトの中に記述 – ブクマなどでは通知用ジョブを下流に用意 curl -X POST -H "Authorization: token $token" https://github- enterprise.example.com/api/v3/repos/example/Exa mple-Project/statuses/$git_head -d "{ "state": "success", "target_url": "${BUILD_URL}", "description": "The build has succeeded." }"
37.
Slack への通知 ● Slack
の Integrations ● Jenkins の Slack Notification Plugin
38.
良いところと課題 ● ○ push
したら自動でテスト実行 ● ○ 失敗時の通知がされる – × Slack と GH;E だけなので弱い → XFD? – × GH;E への通知がビルド処理の中にある ● ○ ファイルの変更結果をコミット ● × ファイル変更とテスト実行が同じ Shell ス クリプトになっていて管理しづらい ● ○ コマンド 1 つで確認用にデプロイ
39.
レビューとマージ
40.
開発が完了したらコードレビュー ● Pull request
上でコメントを残してやりとり ● 問題がある箇所は修正・変更 – ここでの Jenkins の役割は開発時と同じ ● レビュアにとってテスト結果が GH;E 上で確 認できるのが便利 – テストに通っているかどうかすぐにわかる
41.
レビュー後 devel ブランチにマージ ●
Pull request のマージボタンでマージ ● 先にコンフリクト解消が強制されるのでコン フリクト解消ミスをしづらい ● テスト失敗時にわかりやすい
42.
master staging devel features レビュー後 devel ブランチにマージ
43.
良いところ ● ○ レビュアがテスト結果を確認しやすい ●
○ テストに落ちているのに気付かずマージ ということがない – devel ブランチをリリース可能な状態に保てる ● ○ マージボタン強制によりコンフリクト解消 のミスをしづらい
44.
デプロイ
45.
本番リリース用 pull request
作成 ● Staging 系列のブランチを作成して master ブランチに向けた pull request を作成 – ブランチ作成、pull request 作成をコマンド 1 つで実行 ● Staging 系列ブランチを staging 環境にデ プロイして動作確認 – デプロイは Capistrano 3
46.
master staging devel features 本番リリース用 pull request
作成
47.
本番リリース用 pull request
作成
48.
Staging の動作確認後にリリース ● 本番リリース用
pull request のマージボタ ンで master ブランチにマージ ● Capistrano 3 で本番デプロイ
49.
master staging devel features Staging の動作確認後にリリース
50.
良いところと課題 ● ○ 本番リリース用
pull request をコマンド 1 つで作成できる ● ○ デプロイもコマンド 1 つ ● × staging 環境へのデプロイが自動化され ていない
51.
まとめと今後
52.
少年ジャンプルーキーの開発プロセス ● Jenkins、GH;E の活用、連携 –
テスト (インスペクション含) の自動実行でコー ド品質を保つ – ファイル変更処理 ● デプロイは少ないコマンドで完了 – Jenkins は使っていない ● 継続的なソフトウェア進化の礎 – 改善し続けることが大事
53.
今後: Jenkins Workflow
Plugin 検討 ● 2014 年 12 月にバージョン 1.0 リリース ● Scripted control flow – Shell スクリプトに書いてあることを Workflow Plugin のスクリプトに置きかえる ● Pause and resume execution – ユーザーとのインタラクションの機能もあるので デプロイ処理を Jenkins に乗せやすい
54.
Docker コンテナによる確認環境と Jenkins 開発中の機能を確認するための環境を準備する方法の紹介。
55.
たとえばこんなこと
56.
D E 作品をお気に入りする機能を 作るで! あれが云々これが云々や。 機能開発して よっしゃ、作るで! …… できたで! D ほんなら次回リリースするで!
57.
D E 作品のお気に入り機能、ここ がこうなってこうやと思ってた んやけどなー。 リリース直前に初めて動作確認 リリース前の動作確認や!! E なんやて!!
58.
なんてことはさすがにないと思うが
59.
開発した機能の確認が遅れると困る ● 無駄な手戻り ● 開発スピードの低下 ●
特に UI/UX 周り ● 開発中の機能を確認できる環境は便利 – チーム内 : 動作を見ながら開発を進める – ステークホルダーによる確認
60.
目的 開発中の機能の動作や UI/UX を 確認するための
Web アプリケー ションを手軽に動かしたい 社内では devhost と呼んでいる
61.
master staging devel }features ココが 対象 対象とするブランチ
62.
前提として ● 開発者自身はローカルホスト上でアプリケー ションを動かして開発 ● Devhost
は誰のために? – チーム内のメンバー (非開発者・遠隔地) – チーム外 ● → 社外からも見えるように (状況次第だが) ● ブランチ名に対応するドメイン名 ● ストレージは開発用に 1 つ
63.
https://{branch-name}.dev.example.com/
64.
既存の方法 (はてなブックマークなど) ● 開発用サーバで複数アプリケーション起動 ●
別ポート番号を使用 (or Unix ドメインソケット) ● ポート番号解決 : Nginx 上の Lua で https://{branch-name}.dev.example.com/ → {ポート 番号} 開発用 proxy Nginx 開発用サーバー Nginx アプリケーション アプリケーション アプリケーション ポート番号 解決
65.
課題 ● 同じ環境を複数アプリケーションが使用する ので面倒だったり問題が起こったり – ファイルシステム、ライブラリ等 ●
ブランチ名とポート番号の対応付けが面倒 – ファイルを使って管理するなど
66.
そこで Docker Engine
の登場
67.
Docker Engine とは? ●
コンテナ型の仮想化技術 – 環境を分離するという目的に適す ● ゲストの状態を Docker イメージとしてバー ジョン管理 ● Dockerfile にビルド処理を記述して Docker イメージをビルド ● Docker イメージをもとに Docker コンテナ 内でアプリケーションを動作させる
68.
コンテナ型の仮想化 物理マシン ハイパーバイザ 仮想マシン ゲスト OS ● ユーザー空間を分けてリソースを制限する –
ファイルシステム、プロセス、など 物理マシン Kernel ユーザー 空間 ユーザー 空間 コンテナ型の仮想化完全仮想化
69.
Docker イメージとコンテナ Dockerfile Docker イメージ docker
build Docker コンテナ Docker コンテナ docker run コンテナが生成され 中でプロセスが動く
70.
Docker コンテナを用いた確認環境 ● 開発用サーバで複数
Docker コンテナ起動 ● 別ポート番号を使用 ● ポート番号解決 : Docker API を使用 https://{branch-name}.dev.example.com/ → {ポート 番号} 開発用 proxy Nginx 開発用サーバー Proxy 用 Plack アプリケーション Docker コンテナ Docker コンテナ Docker コンテナ Docker API ポート番号解決ポート番号解決
71.
Docker API を用いたポート番号解決 ●
ホスト側のポート番号が適当に割り当て – コンテナ内の web アプリケーションは 80 番 ポートをリッスン – Docker コンテナは 80 番を EXPOSE ● 各ブランチからイメージをビルドする際、ブラ ンチ名に対応したタグをイメージに付ける ● ホスト名からブランチ名を抽出 → Docker API により対応するタグ名のイメージのコン テナを探す → ポート番号取得
72.
Docker API を叩くコードの例 my
$furl = Furl->new(); my $uri = do { local $_ = $docker_remote_api->clone; $_->path('/containers/json'); $_; }; my $body = decode_json $furl->get($uri)->content }; (grep { $_->{Image} eq "$host:latest" } @$body)[0];
73.
Docker コンテナの生成
74.
Dockerfile を準備して docker
build ● ライブラリ等インストール → プロジェクトの ファイルコピー → コマンド登録 FROM debian:stable # (略) # config/setup.sh は本番サーバー構築時にも使用される初期化スクリプト。 COPY script/setup.sh /app/shared/script/setup.sh RUN sh /app/shared/script/setup.sh # (略) # Source RUN mkdir -p /app/src COPY . /app/src # (略) WORKDIR /app/src EXPOSE 80 CMD ["supervisord", "-c", "/app/src/config/docker/webapp/supervisord.conf"]
75.
イメージビルドに時間がかかる問題 ● debian:stable から最後までビルドすると 30
分程度かかる – apt-get や Perl のインストール – Perl ライブラリのインストール
76.
イメージビルド時のキャッシュの活用 ● Docker イメージのビルドにキャッシュが効く ●
デフォルトで有効 ● COPY すると (変更されてると) キャッシュ効 かない ● プロジェクト全体を COPY する前に、初期化 処理用のファイルだけを COPY – それらのファイルが変更されていなければ初期 化処理のキャッシュが有効に!
77.
# config/setup.sh は本番サーバー構築時にも使用される #
初期化スクリプト。 COPY script/setup.sh /app/shared/script/setup.sh RUN sh /app/shared/script/setup.sh # CPAN Modules RUN mkdir -p /app/shared/carton WORKDIR /app/shared/carton COPY cpanfile /app/shared/carton/cpanfile COPY cpanfile.snapshot /app/shared/carton/cpanfile.snapshot RUN carton install --deployment
78.
キャッシュ効果でビルド時間短縮!!
79.
Jenkins 上でのビルドとデプロイ ● Jenkins
上で – docker build – docker rm -f : 同じブランチのコンテナを止める – docker run ● 実際のコマンドは rake タスクにしてある – ブランチ名 → タグ名変換処理 – 同じブランチの古いコンテナが動いてるか調査 – Shell スクリプトより Ruby の方が書きやすい
80.
Jenkins 上でのビルドとデプロイ 1. git
clone イメージ 2. docker build コンテナ 3. docker rm / docker run 開発用サーバー 開発用サーバー内で完結 しているので単純
81.
ビルド開始方法 ● 現在は手動でビルド開始 – Jenkins
API 叩く or Web UI から – 対象ブランチをパラメータで受け取り ● 本来は次のようにしたい – devel ブランチへの push で自動的にビルド – 既に devhost が立っているブランチへの push で自動的にビルド
82.
対象ブランチのパラメータ化 POST /job/{job-name}/buildWithParameters?branch_name={branch-name}
83.
なぜ Jenkins でビルドするのか ●
同じ環境でビルド処理を行わせたい ● ビルドの管理 ● 変遷 – Capistrano などで直接開発用サーバー上で ビルド → 複数人が同時に使うと破滅 – Docker API を使う → キャッシュが効きづらく て困る
84.
今後 ● devel ブランチの自動デプロイ ●
Pull request との関連付けを強める – コメントで新規 devhost 作成 (?) – close 時に自動で devhost 破棄 – 破棄が結構面倒なので自動化したい ● ビルド後にコンテナ内でテストしてそれから デプロイ
85.
小ネタ: 確認環境用の favicon ●
ローカルホスト上の web アプリケーションや 確認用の web アプリケーション ● 本番と確認用を間違えたりしてしまう ● Favicon を変えることでタブで識別しやすく
86.
小ネタ: 確認環境用の favicon
87.
まとめ
88.
はてなにおける Jenkins ● GH;E
への push に応じたテスト自動実行 や確認用ホストへのデプロイなど ● 開発プロセスの中でビルドやテストの実行を 指揮する大切な役割を果たしている – 少年ジャンプルーキーでの例を紹介 ● Jenkins で Docker ビルドしてデプロイする という仕組みで手軽に確認環境を用意
89.
We are hiring!
Download