Continuous Integrasi dengan Hudson dan. NET
Baru saja saya ditugaskan dengan menyiapkan persekitaran pembangunan untuk suatu kedai NET .. I'ma fan besar (ATIC) dari Continuous Integration (CI) dan mula memikirkan cara yang baik untuk melakukan hal ini (dan menyenangkan / cara yang keren juga).
Bagi anda yang baru untuk terus-menerus Integrasi, saya pikir Martin Fowler menjelaskan hal terbaik pada-Nya Continuous Integration halaman:
"Continuous Integration adalah pembangunan perisian amalan di mana ahli pasukan mengintegrasikan pekerjaan mereka sering, biasanya setiap orang mengintegrasikan setidaknya harian - menghasilkan integrasi beberapa per hari. Setiap integrasi disahkan oleh membina automatik (termasuk ujian) untuk mengesan kesalahan integrasi secepat mungkin. Banyak pasukan mendapati bahawa pendekatan ini mengarah ke integrasi masalah berkurang secara signifikan dan membolehkan pasukan untuk membangunkan perisian kohesif lebih cepat. "
Aku sudah menggunakan CruiseControl untuk sementara sekarang, tapi untuk projek-projek Jawa, dan aku cadangan untuk melihat Hudson sebagai alternatif. Aku dievaluasi dan memutuskan akan menjadi penyelesaian yang jauh lebih baik kerana alasan-alasan berikut:
- Sangat mudah untuk menggunakan antara muka berasaskan web membuat setup, konfigurasi dan menggunakan angin (atas persekitaran didorong XML CruiseControl). Hal ini, digabungkan dengan ...
- arsitektur plugin extensible's Hudson memudahkan untuk membuat fungsi tersuai. Terkini tambah ini ...
- Sebuah komuniti sokongan besar / pangkalan pembangunan
dan anda mempunyai, dengan besar untuk digunakan, juga disokong pelbagai produk dengan sambungan yang mau tidak mau akan merangkumi segala sesuatu yang perlu anda lakukan.
Ok, aku tahu, CruiseControl memiliki banyak ini juga, tapi ayolah, yang ingin untuk berjuang dengan XML sepanjang hidup mereka?
Pemasangan
Pemasangan sangat mudah, ikuti arahan di sini berdasarkan setup anda / pilihan. Secara peribadi kami memasang Tomcat 6 dan disebarkan dengan PERANG Hudson melalui antara muka Pengurusan Tomcat. Satu hal tambahan kami lakukan adalah untuk men-setup variable persekitaran HUDSON_HOME untuk menunjuk pada sebuah disk dengan banyak ruangan, saya ingin tetap BANYAK membina maklumat (I love metrik), sehingga ruangan adalah masalah.
Konfigurasi
Konfigurasi sangat mudah, sekali Hudson adalah untuk membuat dan menjalankan, akses melalui web browser (biasanya http:// <server address>: <port> / Hudson) dan pilih Urus Hudson. Sebelum menatarajah Hudson itu sendiri (Konfigurasi Sistem) saya cadangkan anda memasang plugin yang anda ingin gunakan. Lakukan ini dengan memilih Manage Plugins.
Plugins
Plugin interface dibahagikan menjadi empat bahagian, Pembaharuan, Tersedia, Dipasang dan Advanced, semua cantik diri jelas (kanan?). Gunakan salah satu kaedah berikut untuk memasang plugin anda (s):
- Pilih plugin (s) pada tab sedia, tatal ke bawah ke bawah dan pilih Install.
- Download plugin (s) (umumnya dari Hudson repositori plugin), pilih tab Advanced, masukkan tetapan proksi (jika perlu) dan upload plugin.
baik cara plugin anda akan disediakan setelah anda restart Hudson.
Untuk pemasangan kita saat ini adalah beberapa kunci kami memasang plugin, dan mengapa:
- Hudson Backup - Membolehkan anda untuk backup / restore konfigurasi Hudson, kami mencari ini tak ternilai untuk alasan yang jelas.
- Hudson membina timeout - Plugin ini membolehkan anda untuk mengeset threshold timeout pada membangun, dalam kes itu masuk ke dalam sebuah "menggantung" negara.
- Tuntutan - Plugin ini membolehkan ahli pasukan untuk menuntut tanggung jawab untuk memperbaiki rosak atau tidak stabil membina. Broken membina adalah BURUK, dan harus segera diperbaiki; itu selalu baik jika seseorang memuat pemilikan.
- Green Bola - Balls Hijau bukan Blue Balls. Orang-orang merespon lebih baik untuk kombinasi Green / Warna Merah daripada Biru / Merah.
- Hudson Git - Git Kami memilih sebagai repositori dan plug-in ini memungkinkan akses ke sana. Tidak perlu untuk menekankan pentingnya Pengurusan Kod Sumber yang baik (benar?)
- Hudson Doxygen - Plugin ini membolehkan generasi dokumentasi Doxygen dari kod sumber. Ini adalah alat yang baik untuk (visual) menyemak high keseluruhan dari dokumentasi dalam kod dan saya percaya itu mendorong orang untuk menulis dokumentasi koheren difahami (walaupun hanya benar-benar berkesan jika seseorang secara berkala berjalan di atasnya.)
- Hudson MSBuild - MSBuild digunakan untuk membina projek-projek kami dari baris perintah. Plugin ini membolehkan fungsi ini.
- NCover - plug-in ini memungkinkan pengumpulan dan penyajian hasil NCover dalam Hudson.
- Hudson NUnit - plug-in ini memungkinkan pengumpulan dan penyajian statistik NUnit dalam Hudson
- Hudson Seleniumhq - ini membolehkan berjalan dan pengumpulan ujian Selenium. Latihan ini hujung depan kami untuk memastikan kami tidak menyelesaikan apa pun sudah di tempat.
- Tugas Pengimbas - Plugin ini scan bagi tugas-tugas terbuka di set tertentu gambar dalam modul projek dan memaparkan hasilnya.
- Amaran - Plugin ini mengumpulkan amaran compiler projek modul dan membayangkan keputusan.
- Hudson instant-messaging - kemampuan ini membolehkan mesej segera di Hudson. Digunakan oleh Jabber plugin.
- Jabber - Menghantar membina notis untuk jabber kenalan dan / atau chatroom. Juga membolehkan kawalan membina melalui jabber 'bot'.
- Twitter - ini membolehkan penghantaran (asas) tweets selepas membina telah selesai ke akaun kericau tertentu. Visibilitas penting dalam setiap projek.
- Pelanggaran Hudson - ini membolehkan pengumpulan data dari pelbagai "pelanggaran menyemak" perkakas (kita gunakan untuk StyleCop dan Simian khas) dan menyajikan dalam Hudson. Juga membolehkan anda menetapkan limit pada "melanggar" memaksa membina menjadi negara yang tidak stabil jika perlu.
- Hudson Release - Plugin ini membolehkan anda untuk menetapkan sebelum dan selepas membina tindakan yang dijalankan ketika merilis membina dipicu secara manual. Kami menggunakan plugin ini untuk melakukan "kita keluaran"
- Continuous Integrasi Game - Membolehkan skor dari membina, mendorong perilaku yang baik dan biasanya sebuah plugin menyenangkan baik untuk memiliki.
- Chuck Norris - Sebuah menyenangkan "" plugin, yang menyenangkan adalah penting. Chuck mendapatkan kesal ketika membina berehat, ditambah beberapa baris sejuk Chuck untuk boot.
Hudson
Ok, sekarang untuk Hudson itu sendiri. tatarajah Hudson diri cukup jelas dan terdokumentasi (klik pada pertanyaan itu tanda untuk konteks bantuan sensitif). Aku akan berjalan melalui apa yang kita lakukan untuk mendapatkan pelayan kami sedia untuk kerja (beberapa pilihan ini hanya muncul sekali plugin dipasang, yang sebabnya saya menganjurkan melakukan terlebih dahulu):
- Home Directory - ini diambil dari variable persekitaran HUDSON_HOME.
- Sistem Mesej - Tampil di halaman arahan anda, menulis sesuatu yang dingin di sini tentang persekitaran anda CI.
- Aktifkan Keselamatan - diperiksa, dengan pilihan:
- Port TCP rawak, Access Control dengan menggunakan Database Hudson sendiri, Logged pengguna boleh melakukan sebarang
- Ant - menambah sebuah pemasangan Ant untuk digunakan oleh kami Release Plugin.
- MSBuild Builder - dikonfigurasi untuk kita membina, yang diperlukan untuk membina NET.
- Selenium Remote Control - Menetapkan pelari htmlSuite untuk menjalankan ujian Selenium kami.
- Git - Menetapkan lokasi eksekusi Git (termasuk exe aktual sebagai sebahagian daripada jalan).
- Email Notis - Pretty standard SMTP maklumat, ingatlah untuk menetapkan URL Hudson untuk sesuatu orang yang menerima e-mel yang boleh digunakan untuk mengakses membina mesin (yakni, tidak menggunakan sesuatu seperti localhost). Juga, menetapkan Admin Sistem alamat Email.
- Game Continuous Integration - Aktifkan itu.
- Notis Jabber - Aktifkan itu. Gunakan bantuan konteks untuk memahami pilihan dan menyelesaikan hal-hal yang memerlukan. Satu cadangan, menukar awalan perintah Bot untuk sesuatu selain! untuk mengelakkan orang luar mengakses sengaja membina bot dan mengacaukan sistem anda.
- Global Twitter Tetapan - Setup akses yang berkicau, Hudson akan menciak berdasarkan pilihan yang anda berikan, tatarajah per projek juga.
Selesai, klik Save
Menciptakan Pekerjaan
Kami dihalang untuk menggunakan. NET jadi kami memilih untuk membina semua projek kami sebagai projek gaya bebas, dan seterusnya juga menjelaskan tentang bagaimana dan apa yang kami dikonfigurasikan dengan menggunakan pilihan ini:
Klik New Job, mengisi nama pekerjaan dan pilih Build a-projek perisian freestyle.
Sekali lagi, sebahagian besar pilihan baik didokumentasikan dalam konteks membantu sensitif. Berikut adalah beberapa pilihan yang kami dikonfigurasikan (saya sudah ditinggalkan sebahagian besar yang umum yang jelas diri sendiri):
- Bahagian Utama
- Buang Old Membangun - Kami memilih untuk hanya menyimpan 100 membina, untuk tujuan metrik (aku menyebutkan aku suka metrik?), Dapat mengubah ini nanti.
- Pilihan Lanjut Bahagian Projek
- Tempoh Quiet - Berubah ini untuk 15 saat untuk mengelakkan masalah dengan penyegerakan dan bangunan.
- Bahagian Pengurusan Kod Sumber
- Git - Kami menggunakan git sebagai SCM keluar daripada pilihan, kami mempunyai pusat titik "" di mana semua orang Menyegerakkan dan membina pelayan untuk menukar monitor. Hanya menambah jumlah gambar berasaskan lokasi (ada di pelayan yang sama dengan Hudson jadi ini merupakan pilihan yang paling mudah) untuk menunjuk ke repositori ayo. Sisanya pilihan yang tersisa sebagai default.
- Membangun Pemicu Bahagian
- Poll SCM - diperiksa, SCM setiap minit pungutan untuk perubahan. Hal ini telah mencetuskan membina.
- Bahagian Bangun Lingkungan
- Konfigurasi Release Build
- Versi keluaran Templat - label ini digunakan oleh Manager Release kepada label membina. Boleh menggunakan pembolehubah persekitaran ditakrifkan pada bahagian seterusnya.
- Release Parameter - parameter Tentukan yang anda perlukan selama keluaran membina di sini. Kita ditakrifkan RELEASE_VERSION untuk membolehkan nombor keluaran harus melewati untuk semut membina script, ditentukan kemudian. Parameter ini akan diminta untuk saat memilih Release Build dari projek menu.
- Sebelum Keluaran Build - Langkah-langkah untuk menjalankan sebelum membina. Beberapa langkah boleh ditakrifkan.
- Setelah Release Build - Langkah-langkah untuk berjalan selepas membina. Beberapa langkah boleh ditakrifkan. Kami menetapkan langkah Ant Build tunggal untuk pakej, kompres dan menambah nombor untuk membina artifak yang relevan untuk projek tertentu. Paket dikompresi ini kemudian naik ke keluaran "FTP" halaman untuk dikonsumsi oleh pihak lain (QA orang, keluaran orang dll).
- Membatalkan membina jika terjebak - Kami menetapkan ini dalam 10 min, gagal jika tersekat, berjaga-jaga.
- Konfigurasi Release Build
- Build Bahagian
- Di sini anda boleh menentukan sejumlah langkah-langkah untuk membina membina penyelesaian anda dan menyiapkannya untuk keluaran. Ini adalah langkah-langkah yang kita dilakukan, agar (untuk projek-projek besar, ada yang dikecualikan untuk projek-projek tertentu sahaja):
- Windows Batch Perintah untuk mengkonfigurasikan pra-persekitaran. Pada dasarnya kita mengubahsuai app.config ada dan web.config dan persekitaran menyertai dalam nilai-nilai tertentu untuk menggantikan nilai-nilai default untuk hal-hal seperti database dan file path. alat yang kita pakai untuk ini adalah alat MergeConfiguration dibekalkan dengan Microsoft Enterprise Library 4.1. / web.config ) and creates a new web.config / app.config . Diperlukan jumlah gambar delta (xxx.dconfig) dan menyatu dengan gambar-gambar yang ada (app.config / web.config) dan mencipta web.config baru / app.config. Satu hal yang perlu diperhatikan di sini adalah bahawa kami harus memindahkan app.config yang ada / web.config fail ke fail sementara (base.config misalnya) SEBELUM base.config penggabungan dan bergabung dengan xxx.dconfig untuk membuat app.config / web. config
bergerak "\ <path> app.config" "<path> \ base.config"
"<path> \ MergeConfiguration.exe" "<path> \ base.config" "<path> \ ci.dconfig" "<path> \ app.config"- Windows Batch Command untuk berjalan dalam skrip database menggunakan osql.exe. Semua database diciptakan kembali dari awal dengan menggunakan script yang disediakan masing-masing membina. Kami melakukan ini sebagai failsafe untuk memastikan skrip SQL berpadanan dengan kod yang sedang digunakan.
osql-S-U <server> <user>-L <password>-i <path> \ ResetCIDatabase.sql
osql-S-U <server> <user>-L <password>-d-i <database> <path> \ Initialise.sql- langkah MSBuild, tidak ada parameter, hanya membina penyelesaian dari akar.
- Windows Batch Command untuk menjalankan Doxygen utiliti baris perintah untuk menghasilkan dokumentasi kod untuk projek menggunakan jumlah gambar doxyfile.config tersuai.
"<path> \ Doxygen.exe" doxyfile.config
- Windows Batch Command untuk menjalankan perintah StyleCop utiliti baris ( StyleCopCmd ) untuk menyemak pelanggaran kod untuk gaya. Beberapa hal yang perlu diketahui tentang versi baris perintah adalah bahawa tatacara jumlah gambar HARUS disebut Settings.Stylecop dan dirujuk tanpa jalan (iaitu, meletakkannya di root projek). Jalankan perintah tanpa parameter untuk melihat apa lagi yang anda boleh lakukan dengan itu. Ini menghasilkan sebuah output XML pelanggaran yang digunakan oleh plugin pelanggaran.
"<path> \ StyleCopCmd.exe"-dari stylecop-output.xml-d. -R-sc Settings.Stylecop-IFP AssemblyInfo *
- Windows Batch Command untuk menjalankan Simian utiliti baris perintah untuk menyemak kod untuk duplikasi. Sebuah alat yang sangat berguna untuk menangkap anda memotong dan menyisipkan askar di luar sana, menghasilkan fail XML yang digunakan oleh plugin pelanggaran.
"<path> \ Monyet-2.2.24.exe" **/*. cs-formatter = xml: monyet-output.xml-failOnDuplication-
- Windows Batch Command untuk mengeksekusi Nunit dan menjalankan Ncover terhadap keputusan untuk menghasilkan laporan pada liputan Test Unit. Nunit melaksanakan ujian unit, NCover memuat output XML Nunit dan menghasilkan laporan dengan trend. Alat sangat berguna. Satu hal yang kita belum tahu belum adalah bagaimana untuk menjalankan ujian unit yang memerlukan perkhidmatan web yang menjalankan, walaupun dipercayai / / iis parameter melakukannya (tidak untuk digunakan walaupun). Satu hal yang kita belum tahu belum adalah bagaimana untuk menjalankan ujian unit yang memerlukan perkhidmatan web yang menjalankan, walaupun dipercayai / / iis parameter melakukannya (tidak untuk digunakan walaupun)
"<path> \ Ncover.console.exe" / / x coverage.xml "<path> \ nunit-console.exe" / noshadow / <full nologo path ke Unit Uji seperated> ruangan DLL's, / / coveragedir h / / pada ncover3.trend
- Windows Batch Command untuk melepaskan artifak dibina untuk persekitaran dalaman. Kami "release" dari fail ke pelayan CI (menjalankan IIS) untuk Selenium untuk menjalankan melawan. Saat ini kita tidak memiliki keperluan untuk menjalankan Selenium tapi ketika keperluan tidak muncul, hal ini akan memudahkan.
xcopy PrecompiledWeb <path dari artifacts> dibina / I / R / V / E / Y
Itu saja sampai bangunan projek untuk saat ini. Ada beberapa perkara yang kita belum dilaksanakan, tetapi akan melalui masa, seperti ujian Selenium, tapi pada saat blog ini mereka tidak dilakukan.
- Di sini anda boleh menentukan sejumlah langkah-langkah untuk membina membina penyelesaian anda dan menyiapkannya untuk keluaran. Ini adalah langkah-langkah yang kita dilakukan, agar (untuk projek-projek besar, ada yang dikecualikan untuk projek-projek tertentu sahaja):
- Post Build Tindakan Bahagian
Bahagian ini mengendalikan semua laporan belakang dibina. Berikut adalah beberapa perkara yang penting kita dihidupkan / dikonfigurasikan:
- Arkib artifak - Kami memilih untuk membina turun arkib untuk tujuan rujukan. Mungkin sedikit berlebihan.
- Aktifkan Plugin Chuck Norris - Chuck adalah mengawasi anda!
- Scan ruang kerja bagi tugas terbuka s - Plugin ini mengimbas kawasan kerja untuk TODO's, FIXME dan NOTA's (tag yang kita gunakan untuk menandakan sesuatu untuk dilakukan dalam kod). Laporan kejadian ini. Ini adalah buruk, menempatkan TODO dalam kod adalah sia-sia, bukan hanya DO itu.
- Laporkan pelanggaran s - mengumpulkan semua masukkan fail XML dan mencipta laporan pelanggaran tunggal. Digunakan untuk menarik dalam Simian dan pelanggaran StyleCop ke dalam laporan.
- Imbas Compiler Amaran - menyemak keluar standard untuk peringatan pengkompil, kita set untuk mengimbas hanya untuk parser MSBuild.
- Publish Doxygen - menerbitkan Doxygen dihasilkan jumlah gambar, Direktori menggunakan HTML Doxygen.
- Email notis - membolehkan notis emel untuk menghantar email ke semua orang di pasukan setiap kali suatu peristiwa terjadi pada membina (gagal, memperbaiki, membina dll)
- Aktifkan Continuous e Integrasi GAM (lihat link plugin di atas untuk butiran lebih lanjut tentang ini)
- Biarkan patah membina mendakwa - Membolehkan orang untuk menuntut patah membina. Pemilikan penting, seseorang harus bertanggung jawab untuk menetapkan membina rosak. Ingat, ini bukan soal salah-menyalahkan, ini tentang memperbaikinya.
- notis Jabber - mengaktifkan dan memasuki everyones akaun Jabber. Hal ini membolehkan segera notis membina acara untuk pengembang. Sekali lagi, semua orang diberitahu segalanya.
Itu saja, pekerjaan anda dibuat dan sedia untuk membina.
Saya berharap hal ini terbukti kepada anda beberapa daripada kamu di luar sana, aku tidak mempunyai masalah terlalu banyak dengan menatarajah Hudson di lingkungan NET. Dan mereka yang saya punya akhirnya diselesaikan. Masih ada beberapa masalah / kebimbangan bahawa kita perlu besi keluar seperti:
- Bagaimana kawalan versi kita dan versi melepaskan?
- Bagaimana kita berurusan dengan membina dependencies dan melepaskan ketergantungan dengan projek-projek? (Hudson seharusnya menangani hal ini dengan baik, belum terbukti walaupun)
- Bagaimana cara mendapatkan NUnit untuk menjalankan ujian Unit Perkhidmatan Web?
- Mengotomasi keluaran ke lingkungan QA.
Selain itu hal-hal berjalan cukup lancar, akan posting lebih (lebih pendek) entri seperti yang kita membuat lebih banyak kemajuan.











Terima kasih banyak.
Benar-benar sebuah rencana yang baik.
Great Perkara. Saya akan menyarankan melihat pelbagai konfigurasi di dalam studio visual dan kemudian, dengan menggunakan nama tatarajah sebagai parameter untuk mendapatkan parametrized membina bagi setiap persekitaran (contohnya Sambungan string untuk dev, qa dll). Ini adalah kerja besar bagi kami.