Bagaimana cara menaikkan versi perakitan C # secara otomatis melalui platform CI kami (Hudson)?

112

Saya dan grup saya sangat buruk saat menaikkan nomor versi perakitan dan kami sering mengirimkan rakitan dengan versi 1.0.0.0. Jelas, ini menyebabkan banyak sakit kepala.

Kami menjadi jauh lebih baik dengan praktik kami melalui platform CI kami dan saya benar-benar ingin mengaturnya untuk menaikkan nilai secara otomatis di dalam assemblyinfo.csfile sehingga versi rakitan kami diperbarui secara otomatis dengan perubahan kode dalam rakitan itu.

Saya sebelumnya telah menyiapkan (sebelum kami menemukan Hudson ) cara untuk meningkatkan nilai melalui salah satu msbuildatau baris perintah (tidak dapat mengingat), tetapi dengan Hudson, itu akan memperbarui repositori SVN dan memicu build LAIN. Itu akan menghasilkan loop tanpa batas yang lambat karena Hudson melakukan polling SVN setiap jam.

Apakah meminta Hudson menaikkan nomor versi adalah ide yang buruk? Apa cara alternatif untuk melakukannya?

Idealnya, kriteria solusi saya adalah yang:

  • Tambahkan nomor build assemblyinfo.cssebelum build
  • Hanya menambah nomor build di rakitan yang telah berubah. Ini mungkin tidak dapat dilakukan karena Hudson menghapus folder proyek setiap kali membangun
  • Melakukan assemblyinfo.cs diubah ke dalam repositori kode (saat ini VisualSVN )
  • Tidak menyebabkan Hudson memicu build baru saat build berikutnya memindai perubahan

Mengerjakan ini di kepala saya, saya dapat dengan mudah menemukan solusi untuk sebagian besar ini melalui file / perintah batch, tetapi semua ide saya akan menyebabkan Hudson memicu build baru saat memindai berikutnya. Saya tidak mencari seseorang untuk melakukan segalanya untuk saya, cukup arahkan saya ke arah yang benar, mungkin teknik untuk membuat Hudson mengabaikan komitmen SVN tertentu, dll.

Semua yang saya temukan sejauh ini hanyalah artikel yang menjelaskan cara mendapatkan nomor versi yang bertambah secara otomatis, tidak ada yang memperhitungkan platform CI yang dapat diputar menjadi loop tanpa batas.

Allen Rice
sumber

Jawaban:

63

Alternatif sederhana adalah membiarkan lingkungan C # menaikkan versi rakitan untuk Anda dengan menyetel atribut versi ke major.minor.*(seperti yang dijelaskan di templat berkas AssemblyInfo.)

Anda mungkin mencari solusi yang lebih komprehensif.

EDIT (Tanggapan atas pertanyaan dalam komentar):

Dari AssemblyInfo.cs:

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
Greg D
sumber
Saya belum pernah menemukan ini sebelumnya, bisakah Anda menjelaskan lebih detail tentang apa yang dilakukannya. Apakah itu hanya berfungsi dalam satu IDE atau apakah itu bekerja di seluruh tim pengembang dengan platform CI?
Allen Rice
ahhh Saya telah melihat sebelumnya, itu mungkin solusi yang dapat diterima tetapi # built tidak disimpan dalam subversi dll. Saya memiliki pengaturan Hudson untuk mengarsipkan file dan dengan cara itu disimpan sehingga mungkin dapat diterima. Saya harus melakukan penelitian lebih lanjut tentang cara kerja mekanisme itu, terima kasih! Anda tidak akan tahu bagaimana hal itu menentukan apa yang harus dimasukkan sebagai nilai, bukan?
Allen Rice
1
Lihat jawaban saya di bawah untuk jawaban atas pertanyaan Anda. Nilai ditentukan berdasarkan waktu pembuatan.
Kyle Trauberman
Wow, saya pikir ini akan berhasil. Tidak yakin bagaimana kami mengabaikan solusi sederhana seperti itu
Allen Rice
Semoga demikian, senang saya bisa membantu. Mengapa melakukan sesuatu dengan cara yang sulit sedangkan cara yang mudah dan cepat juga cara yang benar? :)
Greg D
65

Inilah yang saya lakukan, untuk mencap atribut AssemblyFileVersion.

Menghapus AssemblyFileVersion dari AssemblyInfo.cs

Tambahkan file baru, kosong, bernama AssemblyFileInfo.cs ke proyek.

Instal kumpulan alat tugas komunitas MSBuild di mesin hudson build atau sebagai dependensi NuGet di proyek Anda.

Edit file proyek (csproj), itu hanya file msbuild, dan tambahkan yang berikut ini.

Di suatu tempat akan ada <PropertyGroup>versi yang menyatakan. Ubah itu sehingga terbaca misalnya

 <Major>1</Major>
 <Minor>0</Minor>
 <!--Hudson sets BUILD_NUMBER and SVN_REVISION -->
 <Build>$(BUILD_NUMBER)</Build>
 <Revision>$(SVN_REVISION)</Revision>

Hudson menyediakan variabel env yang Anda lihat di sana ketika proyek dibangun di atas hudson (dengan asumsi itu diambil dari subversi).

Di bagian bawah file proyek, tambahkan

 <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')" />
  <Target Name="BeforeBuild" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')">
    <Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)" />
    <AssemblyInfo CodeLanguage="CS" OutputFile="AssemblyFileInfo.cs" AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" AssemblyConfiguration="$(Configuration)" Condition="$(Revision) != '' " />
  </Target>

Ini menggunakan MSBuildCommunityTasks untuk menghasilkan AssemblyFileVersion.cs untuk menyertakan atribut AssemblyFileVersion sebelum proyek dibangun. Anda dapat melakukan ini untuk salah satu / semua atribut versi jika Anda mau.

Hasilnya adalah, setiap kali Anda mengeluarkan build hudson, assembly yang dihasilkan mendapatkan AssemblyFileVersion 1.0.HUDSON_BUILD_NR.SVN_REVISION misalnya 1.0.6.2632, yang berarti build ke-6 # di hudson, yang diperoleh dari revisi subversi 2632.

no
sumber
1
Jadi hanya untuk memperbarui ini: Metode ini berfungsi untuk C #. Saya telah menggunakannya untuk beberapa waktu. Tetapi rakitan C ++ (yaitu C ++ / CLI) masih menjadi masalah. Sejauh yang saya tahu, tugas AssemblyInfo tidak menghasilkan C ++ yang valid. Juga, saya pikir metode ini memiliki sedikit kelemahan karena agak buram bagi pengembang lain untuk memahami apa yang terjadi. Sayang sekali Anda tidak dapat memasukkan nomor versi langsung ke MSBuild sebagai properti ...
CJBrew
@CJBrew Anda bisa membuat file .bat kecil yang menghasilkan kode C ++ untuk AssemblyInfo, dan meminta msbuild memulai scipt itu. Saya tidak yakin apa yang Anda maksud dengan mendorongnya sebagai properti, Anda pasti bisa memasukkan string versi di properti apa pun yang Anda suka - Anda tidak perlu menggunakan mayor / minor / build / revisi yang saya gunakan di sini.
no
Apakah ada yang diperoleh dengan menggunakan rute ini vs. hanya mengomentari AssemblyFileVersion dan membiarkannya disetel agar cocok dengan [assembly: AssemblyVersion ("1.0. *")] Secara otomatis?
cchamberlain
@ColeChamberlain Itu akan bertambah otomatis jika Anda membangunnya dari studio visual di PC Anda sendiri, bukan dari Hudson - dan tidak ada hubungan dengan nomor versi dan revisi kode sumber dan build tertentu.
no
42

Berikut adalah solusi elegan yang memerlukan sedikit kerja keras saat menambahkan proyek baru tetapi menangani prosesnya dengan sangat mudah.

Idenya adalah bahwa setiap proyek menautkan ke file solusi yang hanya berisi informasi versi perakitan. Jadi proses build Anda hanya perlu mengupdate satu file dan semua versi assembly ditarik dari satu file saat kompilasi.

Langkah:

  1. Tambahkan kelas ke file solusi Anda * .cs file, saya beri nama min SharedAssemblyProperties.cs
  2. Hapus semua informasi cs dari file baru itu
  3. Potong informasi perakitan dari file AssemblyInfo: [assembly: AssemblyVersion ("1.0.0.0")] [assembly: AssemblyFileVersion ("1.0.0.0")]
  4. Tambahkan pernyataan "using System.Reflection;" ke file dan kemudian paste data ke file cs baru Anda (ex SharedAssemblyProperties.cs)
  5. Tambahkan item yang ada ke proyek Anda (tunggu ... baca terus sebelum menambahkan file)
  6. Pilih file dan sebelum Anda mengklik Tambahkan, klik menu tarik-turun di samping tombol tambah dan pilih "Tambahkan Sebagai Tautan".
  7. Ulangi langkah 5 dan 6 untuk semua proyek yang ada dan baru dalam solusi

Ketika Anda menambahkan file sebagai tautan, itu menyimpan data dalam file proyek dan setelah kompilasi menarik informasi versi perakitan dari satu file ini.

Di kontrol sumber Anda, Anda menambahkan file bat atau file skrip yang hanya menambah file SharedAssemblyProperties.cs dan semua proyek Anda akan memperbarui informasi assembly mereka dari file itu.

sondlerd
sumber
terima kasih, Mark. Mohon maaf untuk link yang mati, ternyata community server tidak semudah itu untuk dipindahkan. Saya harus mencari bantuan untuk topik itu ...
sondlerd
11

Hudson dapat dikonfigurasi untuk mengabaikan perubahan ke jalur dan file tertentu sehingga tidak meminta versi baru.

Pada halaman konfigurasi pekerjaan, di bawah Manajemen Kode Sumber , klik tombol Lanjutan . Di kotak Kawasan yang Dikecualikan, Anda memasukkan satu atau beberapa ekspresi reguler untuk mencocokkan pengecualian.

Misalnya untuk mengabaikan perubahan pada file version.properties, Anda dapat menggunakan:

/MyProject/trunk/version.properties

Ini akan bekerja untuk bahasa selain C # dan memungkinkan Anda untuk menyimpan info versi Anda dalam subversi.

Matthew Blackford
sumber
1
Hudson juga dapat mengabaikan komit dari pengguna tertentu atau tidak memicu build tergantung pada pesan komit. Dengan cara ini Anda bisa mengabaikan semua komit dari Hudson.
Peter Schuetze
9

.NET melakukan ini untuk Anda. Di file AssemblyInfo.cs Anda, setel versi assembly Anda ke major.minor. * (Misalnya: 1.0. *).

Ketika Anda membangun proyek Anda, versinya dibuat secara otomatis.

Nomor build dan revisi dibuat berdasarkan tanggal, menggunakan epoch unix, saya yakin. Build didasarkan pada hari ini, dan revisinya didasarkan pada jumlah detik sejak tengah malam.

Kyle Trauberman
sumber
21
<dering, dering> "halo, dukungan produk apa yang bisa saya bantu?" <customer> "saya mengalami kesalahan" <support> "ok, versi apa yang Anda jalankan?" <customer> "versi satu koma dua revisi delapan lima dua lima tiga tujuh empat membangun tujuh empat enam tiga lima dua sembilan ..." <support> "tunggu dulu, cukup ketikkan saja ... hmmm ... tolong ulangi versinya angka, sepertinya build dan revisi itu tidak terdaftar ... "- GRRR!
Jimbo
haha komentar yang bagus. Saya juga bukan penggemar sistem kenaikan itu: p
Joshua Hayes
3
Autoincrement di studio visual sangat menyebalkan.
Kugel
8
@Jimbo: Meskipun kami semua setuju bahwa komentar Anda lucu, dalam praktiknya itu tidak masalah. Ketika Anda berbicara tentang instalasi VS Anda, apakah Anda memiliki Visual Studio 2008 SP1 atau VS2008 9.0.30729.1 SP? Menggunakan nomor build autoincrement adalah skema yang sangat umum dan dapat dengan mudah "diperbaiki" dengan menaikkan nomor versi mayor / minor saat rilis build keluar.
Marek
tertinggi yang telah kami gunakan dengan nomor build adalah 678 sebelum mengatur ulang kembali ke 0 untuk peningkatan dalam revisi kecil (tentu saja cruisecontrol, sepertinya lebih mudah untuk mengatur ulang daripada hudson seperti pada cruisecontrol, Anda hanya masuk dan menyimpannya kembali ke 0 dalam proyek , tetapi segala sesuatu yang lain di hudson lebih baik)
Dean Hiller
8

Saya belum pernah benar-benar melihat fitur 1.0. * Berfungsi di VS2005 atau VS2008. Apakah ada sesuatu yang perlu dilakukan untuk mengatur VS untuk menaikkan nilai?

Jika AssemblyInfo.cs di-hardcode dengan 1.0. *, Lalu di mana build / revisi sebenarnya disimpan?

Setelah meletakkan 1.0. * Di AssemblyInfo, kami tidak dapat menggunakan pernyataan berikut karena ProductVersion sekarang memiliki nilai yang tidak valid - menggunakan 1.0. * Dan bukan nilai yang ditetapkan oleh VS:

Version version = new Version(Application.ProductVersion);

Sigh - ini sepertinya salah satu hal yang ditanyakan semua orang tapi entah kenapa tidak pernah ada jawaban yang pasti. Bertahun-tahun yang lalu saya melihat solusi untuk menghasilkan nomor revisi dan menyimpannya ke AssemblyInfo sebagai bagian dari proses pasca-pembangunan. Saya berharap tarian semacam itu tidak diperlukan untuk VS2008. Mungkin VS2010?

TonyG
sumber
10
Anda harus menghapus AssemblyFileVersion. Selain itu, hasilnya luar biasa bagi kami, jawaban yang diterima adalah.
Allen Rice
1
Ya, menghapus AssemblyFileVersion memungkinkan versi diperbarui, dan tidak ada lagi kesalahan dengan Versi. Bagus. Catatan: dua operasi Build hanya menaikkan revisi satu kali, tetapi jika Anda membangun ulang, revisi diperbarui. Seperti yang dikatakan ktrauberman, ini terlihat seperti build.revision = date.time, yang menjelaskan mengapa data tidak disimpan di mana pun kecuali di assembly. Sekarang saya perlu mendapatkan MSI Setup standar untuk menghasilkan ProductCode baru ketika proyek keluaran utama diperbarui. Penyiapan tidak mengizinkan revisi, hanya build. Saya ingin menginstal melalui instalasi yang sudah ada untuk melakukan pembaruan. Perlu penelitian.
TonyG
5

Saya berasumsi seseorang mungkin juga melakukan ini dengan template teks di mana Anda membuat atribut assembly yang dimaksud dengan cepat dari lingkungan seperti yang dilakukan AssemblyVersion.tt di bawah ini.

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#
var build = Environment.GetEnvironmentVariable("BUILD_NUMBER");
build = build == null ? "0" : int.Parse(build).ToString();
var revision = Environment.GetEnvironmentVariable("SVN_REVISION");
revision = revision == null ? "0" : int.Parse(revision).ToString();    
#>
using System.Reflection;
[assembly: AssemblyVersion("1.0.<#=build#>.<#=revision#>")]
[assembly: AssemblyFileVersion("1.0.<#=build#>.<#=revision#>")]
MikeS
sumber
3

Sebagai kelanjutan dari jawaban MikeS, saya ingin menambahkan bahwa VS + Visual Studio Visualization and Modeling SDK perlu diinstal agar ini berfungsi, dan Anda perlu memodifikasi file proyek juga. Juga harus disebutkan saya menggunakan Jenkins sebagai build server yang berjalan pada kotak server windows 2008 R2 dengan modul versi, di mana saya mendapatkan BUILD_NUMBER.

File Template Teks Saya version.tt terlihat seperti ini

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#
var build = Environment.GetEnvironmentVariable("BUILD_NUMBER");
build = build == null ? "0" : int.Parse(build).ToString();
var revision = Environment.GetEnvironmentVariable("_BuildVersion");
revision = revision == null ? "5.0.0.0" : revision;    
#>
using System.Reflection;
[assembly: AssemblyVersion("<#=revision#>")]
[assembly: AssemblyFileVersion("<#=revision#>")]

Saya memiliki yang berikut ini di Grup Properti

<PropertyGroup>
    <TransformOnBuild>true</TransformOnBuild>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>

setelah impor Microsoft.CSharp.t target, saya memiliki ini (tergantung di mana Anda menginstal VS

<Import Project="C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />

Di server build saya, saya kemudian memiliki skrip berikut untuk menjalankan transformasi teks sebelum build aktual, untuk mendapatkan nomor perubahan terakhir di TFS

set _Path="C:\Build_Source\foo"

pushd %_Path% 
"%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\tf.exe" history . /r /noprompt /stopafter:1 /Version:W > bar
FOR /f "tokens=1" %%foo in ('findstr /R "^[0-9][0-9]*" bar') do set _BuildVersion=5.0.%BUILD_NUMBER%.%%foo
del bar
popd

echo %BUILD_NUMBER%
echo %_BuildVersion%
cd C:\Program Files (x86)\Jenkins\jobs\MyJob\workspace\MyProject
MSBuild MyProject.csproj /t:TransformAll 
...
<rest of bld script>

Dengan cara ini saya dapat melacak build DAN changeets, jadi jika saya belum memeriksa apa pun sejak build terakhir, digit terakhir tidak boleh berubah, namun saya mungkin telah membuat perubahan pada proses build, oleh karena itu perlu nomor terakhir kedua . Tentu saja jika Anda membuat beberapa check-in sebelum membangun, Anda hanya mendapatkan perubahan terakhir yang tercermin dalam versinya. Saya kira Anda bisa menggabungkan itu diperlukan.

Saya yakin Anda dapat melakukan sesuatu yang lebih menarik dan memanggil TFS langsung dari dalam Template tt, namun ini berhasil untuk saya.

Saya kemudian bisa mendapatkan versi saya saat runtime seperti ini

Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
return fvi.FileVersion;
aggaton
sumber
1

Solusi saya tidak memerlukan penambahan alat eksternal atau bahasa skrip - cukup dijamin untuk bekerja pada mesin build Anda. Saya menyelesaikan masalah ini di beberapa bagian. Pertama, saya telah membuat file BUILD.BAT yang mengubah parameter BUILD_NUMBER Jenkins menjadi variabel lingkungan. Saya menggunakan fungsi "Jalankan perintah batch Windows" Jenkins untuk menjalankan file batch build dengan memasukkan informasi berikut untuk build Jenkins:

     ./build.bat --build_id %BUILD_ID% -build_number %BUILD_NUMBER%

Di lingkungan build, saya memiliki file build.bat yang dimulai sebagai berikut:

     rem build.bat
     set BUILD_ID=Unknown
     set BUILD_NUMBER=0
     :parse_command_line
     IF NOT "%1"=="" (
         IF "%1"=="-build_id" (
             SET BUILD_ID=%2
             SHIFT
             )
         IF "%1"=="-build_number" (
             SET BUILD_NUMBER=%2
             SHIFT
         )
         SHIFT
         GOTO :parse_command_line
     )
     REM your build continues with the environmental variables set
     MSBUILD.EXE YourProject.sln

Setelah saya melakukannya, saya mengklik kanan pada proyek yang akan dibangun di panel Solution Explorer Visual Studio dan memilih Properties, pilih Build Events, dan masukkan informasi berikut sebagai Pre-Build Event Command Line, yang secara otomatis membuat file .cs berisi informasi nomor build berdasarkan setelan variabel lingkungan saat ini:

     set VERSION_FILE=$(ProjectDir)\Properties\VersionInfo.cs
     if !%BUILD_NUMBER%==! goto no_buildnumber_set
     goto buildnumber_set
     :no_buildnumber_set
     set BUILD_NUMBER=0
     :buildnumber_set
     if not exist %VERSION_FILE% goto no_version_file
     del /q %VERSION_FILE%
     :no_version_file
     echo using System.Reflection; >> %VERSION_FILE%
     echo using System.Runtime.CompilerServices; >> %VERSION_FILE%
     echo using System.Runtime.InteropServices; >> %VERSION_FILE%
     echo [assembly: AssemblyVersion("0.0.%BUILD_NUMBER%.1")] >> %VERSION_FILE%
     echo [assembly: AssemblyFileVersion("0.0.%BUILD_NUMBER%.1")] >> %VERSION_FILE%

Anda mungkin perlu menyesuaikan dengan selera bangunan Anda. Saya membangun proyek secara manual sekali untuk menghasilkan file Version.cs awal di direktori Properties dari proyek utama. Terakhir, saya secara manual menyertakan file Version.cs ke dalam solusi Visual Studio dengan menyeretnya ke panel Solution Explorer, di bawah tab Properties untuk proyek itu. Dalam build mendatang, Visual Studio kemudian membaca file .cs tersebut pada waktu build Jenkins dan mendapatkan informasi nomor build yang benar darinya.

johnwbyrd
sumber
1

Jadi, kami memiliki proyek dengan satu solusi yang berisi beberapa proyek yang memiliki rakitan dengan nomor versi berbeda.

Setelah menyelidiki beberapa metode di atas, saya baru saja menerapkan langkah build untuk menjalankan skrip Powershell yang melakukan pencarian-dan-ganti pada file AssemblyInfo.cs. Saya masih menggunakan nomor versi 1.0. * Dalam kontrol sumber, dan Jenkins hanya memperbarui nomor versi secara manual sebelum msbuild berjalan.

dir **/Properties/AssemblyInfo.cs | %{ (cat $_) | %{$_ -replace '^(\s*)\[assembly: AssemblyVersion\("(.*)\.\*"\)', "`$1[assembly: AssemblyVersion(`"`$2.$build`")"} | Out-File $_ -Encoding "UTF8" }
dir **/Properties/AssemblyInfo.cs | %{ (cat $_) | %{$_ -replace '^(\s*)\[assembly: AssemblyFileVersion\("(.*)\.\*"\)', "`$1[assembly: AssemblyFileVersion(`"`$2.$build`")"} | Out-File $_ -Encoding "UTF8" }

Saya menambahkan opsi -Encoding "UTF8" karena git mulai memperlakukan file .cs sebagai file biner jika saya tidak melakukannya. Memang, ini tidak masalah, karena saya tidak pernah benar-benar melakukan hasilnya; itu hanya muncul saat saya menguji.

Lingkungan CI kita sudah memiliki fasilitas untuk mengaitkan Jenkins build dengan git commit tertentu (terima kasih plugin Stash!), Jadi saya tidak khawatir tidak ada git commit dengan nomor versi yang dilampirkan padanya.

jonnybot.dll
sumber
0

Ini adalah mekanisme yang lebih sederhana. Ini hanya melibatkan penambahan langkah membangun tugas perintah Windows Batch sebelum langkah MSBuild dan penggunaan program temukan dan ganti sederhana (FART).

Langkah Batch

fart --svn -r AssemblyInfo.cs "[assembly: AssemblyVersion(\"1.0.0.0\")]" "[assembly: AssemblyVersion(\"1.0.%BUILD_NUMBER%.%SVN_REVISION%\")]"
if %ERRORLEVEL%==0 exit /b 1
fart --svn -r AssemblyInfo.cs "[assembly: AssemblyFileVersion(\"1.0.0.0\")]" "[assembly: AssemblyFileVersion(\"1.0.%BUILD_NUMBER%.%SVN_REVISION%\")]"
if %ERRORLEVEL%==0 exit /b 1
exit /b 0

Jika Anda menggunakan kontrol sumber selain svn, ubah opsi --svn untuk yang sesuai untuk lingkungan scm Anda.

Unduh Kentut

sweetfa
sumber
0

Saya memutuskan untuk menggunakan beberapa metode menggunakan skrip Powershell prebuild ( https://gist.github.com/bradjolicoeur/e77c508089aea6614af3 ) untuk meningkatkan setiap build yang berhasil, lalu di Global.asax saya melakukan sesuatu seperti ini:

  // We are using debug configuration, so increment our builds.
  if (System.Diagnostics.Debugger.IsAttached)
  {
      string version = System.Reflection.Assembly.GetExecutingAssembly()
                                                       .GetName()
                                                       .Version
                                                       .ToString();

      var psi = new ProcessStartInfo(@"svn", "commit -m \"Version: " + version + "\n \"");
      psi.WorkingDirectory = @"C:\CI\Projects\myproject";
      Process.Start(psi); 
  }

Saya masih berpikir seluruh proses terlalu rumit dan saya akan melihat metode yang lebih efisien untuk mencapai hasil yang sama. Saya menginginkan ini terutama untuk meneruskan versi ke SVN dan kemudian ke Jenkin tanpa terlalu banyak alat tambahan.

Netferret
sumber