継続的インテグレーション3分クッキング

7,142 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,142
On SlideShare
0
From Embeds
0
Number of Embeds
1,442
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

継続的インテグレーション3分クッキング

  1. 1. 継続的インテグレーション 3分クッキング~検証ビルド環境をつくろう~ @cointoss1973 2012/07/08(日) アジャイルサムライ読書会#8 #agilesamurai #新宿道場
  2. 2. 自己紹介• こいんとす @cointoss1973 – Programming Language • C, C++, Python – OS • VxWorks – HP-UX, Tru64 UNIX, Solaris, Ubuntu, Windows – Activity • #47redmine スタッフ • #scmbc サポータ • #TokyoMercurial • #日本鼻メガネの会
  3. 3. 告知• 8月あたりに TDD+ペアプロ+DVCS を練習 する初心者向け勉強会(仮) #devstart の開催 を計画中です。 – スタッフ募集中!! – 来週の日曜日に大森駅近辺でスタッフで素振 り予定
  4. 4. 本日つくるものは…• こんな困ったことありませんか? – pullしたソースコードがビルドできない! – pullしたソースコードがテストで落ちる • もちろん、一人でも使えますが複数人での同時開 発する場合にとても有効な構成になります• JenkinsとMercurialと使って、ビルドやテス トが通ったものだけを中央リポジトリに push構成のつくりかたをご紹介します
  5. 5. 検証ビルドの位置づけ作業 Subversionの場合のコ 検証済みビルド ミット後にJenkinsでビル (今回) ド編集・マージ 開発者 開発者コミット(SVN) 開発者 開発者ビルド 事前に開発者が必ず実施 Jenkinsに任せることも可能 コミット後Jenkinsが実施テスト 事前に開発者が必ず実施 Jenkinsに任せられる コミット後Jenkinsが実施 せっかくJenkinsがあるのに毎回開発者がビ ルドテストしないといけないの(´・ω・`)
  6. 6. 完成イメージ
  7. 7. トッピングと味付け• 言語 – C++ – コンパイラ(MSBuild) • Visual Studio 2010 Express• 内容 – fizzbuzz • 第1引数で、最大値を指定可能とします
  8. 8. 材料• ハードウェア – OS : Windows XP SP3 を使います – ご家庭にある使わなくなった古いマシンでOKです – CドライブにWindows 、Dドライブがあるとベターです• ソフトウェア • Jenkins 1.473 (最新版) http://jenkins-ci.org/ • TortoiseHg 2.4.2 (最新版) http://tortoisehg.bitbucket.org/ja/ • Apache(HTTP Server) 2.2.22 (安定版) – http://httpd.apache.org/download.cgi#apache22 • Cygwin 1.7.15 (最新版) http://www.cygwin.com/ » wget を使いたいだけなので代わりのものでもOK。 • Visual C++ 2010 Express • Python 2.7.3 • PuTTY
  9. 9. 作り方• 4~5人前 1. Windows マシンに Jenkins, TortoiseHg, Apache, Python , VisualStu dioをインストールします 1. Cドライブと、Dドライブがあると理想的 2. Jenkins を起動し、プラグインを入れます 3. MercurialとApacheを連携します 4. Mercurialのhookスクリプトを設定します 5. JenkinsにJOB設定をします
  10. 10. Jenkins• インストール先 – D:Jenkins にインストールしておくと無難 – ビルド結果のファイルをある程度保存しておくと良い• インストール完了後 – インストール後下記URLで自動でブラウザが開いてエラー画面が出る が慌てない(Jenkinsさんが起動中である) – http://localhost:8080/• プラグイン – JenkinsのGUIから下記プラグイン達を導入(簡単) – Mercurial plugin • polling 設定を忘れずに。pollingの期間は@dailyでOK – 実際のトリガは、Mercurialのtestingリポジトリへのhookで行う – MSBuild plugin • Visual Studioコンパイルしやすくする。なくても – Warnings plugin • C/C++のコンパイラの警告集計
  11. 11. TortoiseHg• インストーラをダウンロードして実行す るだけ – お好みで日本語メニューにどうぞ – hg コマンドも同梱されます、PATH環境変数 にも自動で追加されます – ssh用のクライアントも同梱されてるみたい• インストール先 – C:Program FilesTortoiseHg
  12. 12. PuTTY• sshキー作成用にPuTTYをインストール • http://www.chiark.greenend.org.uk/~sgtatham/putty/
  13. 13. Mercurial • D:repos にtestingリポジトリをおく • hg init D:reposfizzbuzz_testing • .hg/hgrc に下記hookを追加[hooks]incoming.jenkins = wget -qhttp://zion:8080/mercurial/notifyCommit?url=http://zion/repos/hgweb.cgi/fizzbuzz_testing/
  14. 14. Python• Pythonはバージョンがくつかあります – Python 2.7.3 とする(TortoiseHgと合わせておく と無難) – C:Python27• 環境変数 PATH に”追加” – C:Python27;C:Python27Scripts
  15. 15. Apache• D:repos 以下に公開リポジトリをおきます• hgweb.cgi にて連携します
  16. 16. Apache (httpd.conf)• httpd.conf # AddHandler allows you to map certain file extensions to "handlers": # actions unrelated to filetype. These can be either built into the server # or added with the Action directive (see below) # # To use CGI scripts outside of ScriptAliased directories: # (You will also need to add "ExecCGI" to the "Options" directive.) # AddHandler cgi-script .cgi Alias /repos D:/repos <Directory "D:/repos"> Options +ExecCGI Order allow,deny Allow from all DirectoryIndex hgweb.cgi </Directory>
  17. 17. Apache (.config)• D:repos.config [web] templates = C:/Program Files/TortoiseHg/templates push_ssl = False allow_push = * [paths] / = D:/repos/*• .config – ドットで始まるファイルは、Windowsではコマンドプロ ンプト上で echo aaa > .config で作ってください(ダサい)
  18. 18. Apache (hgweb.cgi)• D:reposhgweb.cgi [web] templates = C:/Program Files/TortoiseHg/templates push_ssl = False allow_push = * [paths] / = D:/repos/*
  19. 19. Apache restart• apache を Restart
  20. 20. Visual Studio 2010 Express• 普通にダウンロードしてインストール• 検証ビルドで本当に必要なのはコンパイ ラ(MSBuild.exe)だけなので、.NETフレー ムワークだけインストールでもOK(未確 認) C:WINDOWSMicrosoft.NETFrameworkv4.0.30319MSBuild.exe
  21. 21. 実食(実演)• 実際に開発者のマシン(matrix)から、検証 ビルドサーバ(zion) に push してみます 本日は Oracle Virtual Box上にインストール、 セットアップ済みのマシンWindows XP SP3 を用意してあります (下ごしらえ済み)
  22. 22. 食べ方• 開発者A • bitbucketなど中央リポジトリからcloneする • ソースコード追加・修正・変更など • コミットする • ビルドサーバにpushする• 開発者B おそらく開発者Aが コミットした • ソースコード修正 changeset • コミット • push ( pull して merge してと表示される) • pull して merge • push
  23. 23. 良い点• ビルドサーバ側で、pushされたchangesetの 検証内容を決めることができます。 – まずはビルドだけでOK • 欲張らない – なお、中央リポジトリにはJenkinsからのみ pushできるようにしておくと確実• アレンジ – 開発者側の変更無しで、”アレンジ”可能
  24. 24. アレンジ• 自動テストを実施してテストが通らない コードを通さない• コードの静的検査が不適合のコードは通 さない• コミットログにチケット番号が入ってい ない場合(ry• push –f したマージしていないコード(ry• 追加されたchangesetをメールで飛ばす チームのポリシーやお好みに応じて、クリーンコードから外れ る良くない変更は事前に防止することができます
  25. 25. 注意点• 開発者が必ず検証ビルドを通すように環境を 構築する – 直接中央リポジトリにpushさせない• “検証ビルド”に時間がかかると、継続的イン テグレーションの旨みであるこまめに統合す る機会が少なくなります – 10分以内が理想。15分が限界 • ビルドマシンを強化する • コンパイルをインクリメンタルビルドにする
  26. 26. 課題– Mercurialのリポジトリを公開する方法( Apache + Mercurial の連携)はもっとcoolな方法がある と思います。 – http://mercurial.selenic.com/wiki/PublishingRepositories
  27. 27. 今日できなかったこと• SSHの連携 – jenkinsさんから ssh で bitbucket.org に接続すると、 (おそらく)入力待ちで止まってしまうため hg clone ssh://… ができなかった • 仕方なく https を使うが .hg/hgrc ファイルに平文で password を書くのでセキュリティ的アレ• ビルドエラー時のrollback – アイデアとしては、ビルド開始時にファイルを作 成しておき、ビルドが正常に完了後、ビルド完了 時にファイルがあったらビルドが失敗したと判断 して rollback する
  28. 28. ご清聴ありがとうございます• JenkinsとMercurial(DVCS)を連携して、ク リーンなリポジトリに保とう• 自動化大事• Windows環境でもめげない – CygwinやMinGW/MSYSなどPOSIX環境を用意 することでなんとかなることも多い

×