Stack Overflow memiliki nomor versi subversi di bagian bawah:
revisi svn: 679
Saya ingin menggunakan versi otomatis seperti itu dengan .NET Web Site/Application
, Windows Forms, proyek / solusi WPD saya.
Bagaimana cara menerapkan ini?
Stack Overflow memiliki nomor versi subversi di bagian bawah:
revisi svn: 679
Saya ingin menggunakan versi otomatis seperti itu dengan .NET Web Site/Application
, Windows Forms, proyek / solusi WPD saya.
Bagaimana cara menerapkan ini?
Jawaban:
Sepertinya Jeff menggunakan CruiseControl.NET berdasarkan beberapa membolak-balik transkrip podcast. Ini tampaknya memiliki kemampuan penyebaran otomatis dari kontrol sumber hingga produksi. Mungkinkah ini tempat penyisipan terjadi?
Kami melakukan ini dengan xUnit.net untuk build otomatis kami. Kami menggunakan CruiseControl.net
(dan mencoba TeamCity). Tugas MSBuild yang kami jalankan untuk integrasi berkelanjutan secara otomatis mengubah nomor build untuk kami, sehingga file ZIP build yang dihasilkan berisi kumpulan DLL dan EXE dengan versi yang benar.
File MSBuild kami berisi referensi UsingTask untuk DLL yang melakukan penggantian ekspresi reguler: (Anda dipersilakan untuk menggunakan DLL ini, karena dicakup oleh lisensi MS-PL juga)
<UsingTask AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll" TaskName = "CodePlex.MSBuildTasks.RegexReplace" />
Selanjutnya, kami mengekstrak nomor build, yang disediakan secara otomatis oleh sistem CI. Anda juga bisa meminta penyedia kontrol sumber untuk memberikan nomor revisi sumber jika Anda mau, tetapi kami menemukan build # dalam sistem CI lebih berguna, karena tidak hanya dapat melihat hasil integrasi dengan nomor build CI, itu juga menyediakan tautkan kembali ke set perubahan yang termasuk dalam build.
<! - Upaya bertingkat untuk menemukan nomor build -> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> $ (BUILD_NUMBER) </BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> $ (ccnetlabel) </BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$ (BuildNumber)' == ''"> <BuildNumber> 0 </BuildNumber> </PropertyGroup>
(Kami mencoba BUILD_NUMBER, yang dari TeamCity, lalu ccnetlabel, yang dari CC.net, dan jika tidak ada, kami default ke 0, sehingga kami dapat menguji skrip build otomatis secara manual.)
Selanjutnya, kami memiliki tugas yang menetapkan nomor build ke dalam file GlobalAssemblyInfo.cs yang kami tautkan ke semua proyek kami:
<Target Name = "SetVersionNumber"> <RegexReplace Pola = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)' Penggantian = 'AssemblyVersion ("$ 1. $ (BuildNumber)")' File = 'GlobalAssemblyInfo.cs' /> <Exec Command = "attrib -r xunit.installer \ App.manifest" /> </Target>
Ini menemukan atribut AssemblyVersion, dan mengganti nomor versi abcd dengan abcBuildNumber. Kami biasanya akan membiarkan sumber dicentang ke dalam pohon dengan tiga bagian pertama dari nomor pembuat tetap, dan bagian keempat nol (fe, hari ini 1.0.2.0).
Dalam proses build Anda, pastikan tugas SetVersionNumber mendahului tugas build Anda. Pada akhirnya, kami menggunakan tugas Zip kami untuk membuat zip hasil build sehingga kami memiliki riwayat binari untuk setiap build otomatis.
Anda dapat melakukannya dengan menambahkan yang berikut ini di mana saja dalam kode Anda
$Id:$
Jadi misalnya @Jeff melakukan:
<div id="svnrevision">svn revision: $Id:$</div>
dan ketika diperiksa di server mengganti $ Id: $ dengan nomor revisi saat ini. Saya juga menemukan referensi ini .
Ada juga $ Tanggal: $ , $ Rev: $ , $ Revisi: $
Jika Anda menggunakan ASP.Net MVC
(seperti yang dilakukan StackOverflow), saya telah menulis panduan 3 langkah yang mudah diikuti tentang cara mendapatkan dan menampilkan revisi SVN terbaru secara otomatis . Panduan ini terinspirasi dengan memikirkan pertanyaan ini sendiri! :Hai)
@Balloon Jika Anda menggunakan TortoiseSVN, Anda bisa menggunakan program SubWCRev yang dikemas . Ini menanyakan copy pekerjaan dan memberi tahu Anda hanya nomor revisi tertinggi. Memang, ini tampaknya merupakan pendekatan sisi klien untuk masalah sisi server, tetapi karena ini adalah program baris perintah yang bagus, Anda seharusnya dapat menangkap keluarannya untuk digunakan dengan cukup mudah.
$rev
dan lainnya seperti itu adalah revisi untuk file individual, jadi mereka tidak akan berubah kecuali file berubah. Nomor di halaman web adalah (kemungkinan besar, saya berasumsi di sini) nomor revisi svn untuk keseluruhan proyek. Itu berbeda dari revisi file, yang telah ditunjukkan oleh orang lain.
Dalam hal ini saya berasumsi bahwa CCNET menarik nomor revisi proyek dan menulis ulang bagian dari halaman web dengan nomor itu. Solusi CI apa pun harus dapat melakukan ini, atur sendiri dengan CCNET dan Teamcity (meskipun bukan halaman web, tetapi versi otomatis versi penerapan / perakitan).
Agar Anda dapat melakukan ini, gunakan solusi CI yang mendukungnya, atau gunakan proses build Anda (MSbuild / Nant) untuk menyimpan versi tersebut dan menuliskannya ke file sebelum "menerapkannya".
Untuk menambah jawaban @ BradWilson: "Anda juga bisa meminta penyedia kendali sumber Anda untuk memberikan nomor revisi sumber jika Anda mau"
Untuk menghubungkan Subversion dan MSBuild: Proyek Tugas Komunitas MSBuild