Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy

1,711 views

Published on

第11回 Jenkins勉強会(東京) (2017/11/08) にて、発表させていただいたLTのスライドです。(時間:5分…ですがあぶれてます)

申し込みサイト : https://www.meetup.com/ja-JP/Tokyo-Jenkins-Area-Meetup/events/243902903/?eventId=243902903&chapter_analytics_code=UA-100000849-2

Published in: Technology
  • Be the first to comment

遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy

  1. 1. 第11回 Jenkins勉強会(東京) LT Ver 1.1 遠くの”計画”よりも 今日の”CD” (継続的デプロイ) 〜branchごとpush時デプロイ〜
  2. 2. 最初の疑問 アンタだれ?
  3. 3. 自己紹介 • 通称:みうみう,「なんで来たん?」氏 • Twitter:@kazuhito_m • Github:kazuhito-m • 老害度:40歳、独身、意識低い系 • 職業:プログラマ(SIer、ビジネスアプリ 属),CI/CDとか考える人 – フリーランス • 好きなもの:自動化,「継続的なんとか」 – CI/CDとか大好物 – 「楽する」ためには「苦労は厭わない」 三浦 一仁(ミウラ カズヒト)
  4. 4. これだけ覚えといたらOKです • 通称:みうみう,「なんで来たん?」氏 • Twitter:@kazuhito_m • Github:kazuhito-m • 老害度:40歳、独身、意識低い系 • 職業:プログラマ(SIer、ビジネスアプリ 属),CI/CDとか考える人 – フリーランス • 好きなもの:自動化,「継続的なんとか」 – CI/CDとか大好物 – 「楽する」ためには「苦労は厭わない」 三浦 一仁(ミウラ カズヒト) 関西に住んでる関西に住んでる JenkinsJenkins好きな好きな 自営業の自営業の 初老初老
  5. 5. さてみなさま、 おそらくは CI/CDを 考える人々 だと思います。
  6. 6. カク言う自分も… とか いくつかの現場で、 みたいに、パイプラインを作る仕事をしていますと…。
  7. 7. (ついでの善意で) 「Webアプリを デプロイ出来る 環境」を作った 瞬間から…
  8. 8. なぜか、こうなった…
  9. 9. なぜか、こうなった… みたいにみたいに なることがなることが いくつかいくつか ありまして。ありまして。
  10. 10. なぜそうなるのかっちゅーと • どーも聞いていますと… – 「要件/POサイド」も「開発畑」も、 「常時使えてシチュエーション/ソース別の”環境”」 を、「欲しいと思った時に最速」で、かつ「気軽」に 欲しいのだ、 ということが解った – 別用途としては… • ある時点のソースをデプロイして欲しい – できるなら「しばらく”環境”維持して取っておいて」欲しい • 在る状態のソースでのビルド&デプロイした環境を比較 – 要件か開発(例えばバグ検証)か両方あり得る「ABテスト」? • ビルド&デプロイを「出来る状態が維持してるか」確認 – これこそCD(継続的デリバリー/デプロイ)
  11. 11. ただ… • どーも聞いていますと… – 「要件/POサイド」も「開発畑」も、 「常時使えてシチュ/ソース別の”環境”」を、 「欲しいと思った時に最速」で、かつ「気軽」に、 欲しいのだ、 ということが解った – 別用途としては… • ある時点のソースをデプロイして欲しい – できるなら「しばらく”環境”維持して取っておいて」欲しい • 在る状態のソースでのビルド&デプロイした環境を比較 – 要件か開発(例えばバグ検証)か両方あり得る「ABテスト」? • ビルド&デプロイを「出来る状態が維持してるか」確認 – これこそCD(継続的デリバリー/デプロイ) (仕事あるのは(仕事あるのは ありがたいけど)ありがたいけど) ”こればっかり””こればっかり” をやってられない。をやってられない。
  12. 12. ということで、 考えまして…
  13. 13. Linux Box ”頃合いのLinuxマシン” を用意します 「RasPI」「nanoインスタンス」 とかよりは、もうちょい 力のあるのを… Jenkins Nginx Docker Engine 「Jenkins」 「Docker」「Nginx」 をインストールします と、少しの設定を行います こういうのをやってみました Gitのリモートリポジトリ branch”A”コンテナ Jenkinsと gitリポジトリを 紐付けます Multibranch Pipeline を使います branch”A” branch”B”コンテナ branch”B” branch”C”コンテナ branch”C” branchを作るたびに、 WebアプリがDocker内に 立ち上げるようにします Jenkinsfile(pipeline script)で そう仕込みます branch名 が入ったURL指定で、 branchごとの Webアプリにアクセス 出来るように します (SpringBoot製のWebアプリ)
  14. 14. デモします。
  15. 15. ごめんなさい、嘘つきました • と、言いたいところですが… アドリブ弱いので動画で https://www.youtube.com/watch?v=F5UiDH5uYQo
  16. 16. 説明 • Multibranch PipelineジョブをJenkinsfile指定で作る • キモは – 起動時に 「アプリ側コンテキストパスをbranch名に変える」 – 公開用Webサーバ(Nginx)の設定を「動的生成し反映」 「アプリ側コンテキストパスと合わせる」 • 恐らく「他のWebアプリ/FW」でも出来る – 「起動時にコンテキストパスを差し替えられるWebアプ リ/FW」ならなんでも • 例えば「.NET ASP Core」とかでも出来る…みたい cmd = "docker run -d --rm --name ${containerName} -v ${localJarDir}:/usr/src/myapp -w /usr/src/myapp ${JDK_DOCKER_IMAGE_NAME} java -jar ./app.jar --server.contextPath=${contextPath}" Jenkinsfile sh "echo 'location ${contextPath} { proxy_pass http://${containerIp}:8080${contextPath}; }' > /etc/nginx/default.d/${containerName}.conf" sh 'nginx -s reload' Jenkinsfile
  17. 17. 詳しくは…(今日の材料) • すべてここにあります – 詳しい解説 • ブログ – 作ったソース • github(JavaのGradleプロジェクト) • これテンプレートをJenkinsに仕込めばすぐ出来るセット – LinuxBoxへのセットアップ(RedHat系)も一応AsCodeしました
  18. 18. ここから ”本当に 伝えたかった” こと
  19. 19. いつもの雑なヤーツ • 今日紹介したのは「すぐ出来る」系の話 – 技術的に難しくないし、Linuxマシン一台で出来る – 別解としては「金の実弾」を詰めば得れるもの • でも、現場でやろうとすれば? – これをするために「経営層を説得」だったり 「稟議通す」だったり… – 「労力」は差し置いても、発想から実現まで 「時間がかかる」と思います • だからこそ – 「近所のPC」でも、「自分のマシン」でも、 Jenkins入れて始めたら、 その日から価値を産むと思います
  20. 20. つまり…
  21. 21. 第11回 Jenkins勉強会(東京) LT 遠くの”計画”よりも 今日の”CD” (継続的デプロイ) 〜branchごとpush時デプロイ〜

×