ฉันจะซิงค์หมายเลขแก้ไข SVN กับเว็บไซต์ ASP.NET ของฉันได้อย่างไร


93

Stack Overflow มีหมายเลขเวอร์ชันการโค่นล้มที่ด้านล่าง:

การแก้ไข svn: 679

ฉันต้องการใช้การกำหนดเวอร์ชันอัตโนมัติดังกล่าวกับ.NET Web Site/ApplicationWindows Forms, WPD projects / solutions ของฉัน

ฉันจะใช้สิ่งนี้ได้อย่างไร


@ Balloon หากคุณใช้ TortoiseSVN คุณสามารถใช้โปรแกรมSubWCRevแบบแพ็กเกจได้ จะค้นหาสำเนาที่ใช้งานได้และบอกเพียงแค่ตัวเลขการแก้ไขสูงสุด เป็นที่ยอมรับว่านี่เป็นแนวทางฝั่งไคลเอ็นต์สำหรับปัญหาฝั่งเซิร์ฟเวอร์ แต่เนื่องจากเป็นโปรแกรมบรรทัดคำสั่งที่ดีคุณจึงควรจับเอาท์พุทเพื่อใช้งานได้ค่อนข้างง่าย
nickf

หากคุณไม่ได้ใช้ TortoiseSVN สำหรับ SubWCRev อย่างที่ฉันพูดที่นี่คุณสามารถใช้svnversionซึ่งทำสิ่งเดียวกันได้
nickf

คำตอบ:


31

ดูเหมือนว่าเจฟฟ์กำลังใช้CruiseControl.NETโดยอาศัยข้อมูลบางส่วนผ่านการถอดเสียงพอดคาสต์ ดูเหมือนว่าจะมีความสามารถในการปรับใช้โดยอัตโนมัติตั้งแต่การควบคุมต้นทางจนถึงการผลิต นี่อาจเป็นจุดที่เกิดการแทรกหรือไม่?


2
หากคุณไม่ได้ใช้ CruiseControl.Net ลองดูคำตอบของฉัน (ปลั๊กไร้ยางอาย!) - stackoverflow.com/questions/163/… ; o)
แอนดรู

ลิงค์เสีย @saint_groceon
Cacho Santa

27

เราดำเนินการกับxUnit.netสำหรับงานสร้างอัตโนมัติของเรา เราใช้CruiseControl.net(และกำลังทดลองใช้ TeamCity) งาน MSBuild ที่เราเรียกใช้สำหรับการรวมอย่างต่อเนื่องจะเปลี่ยนหมายเลขบิลด์ให้เราโดยอัตโนมัติดังนั้นไฟล์ ZIP ของบิลด์ที่ได้จะมีชุดของ DLL และ EXE ที่มีเวอร์ชันที่ถูกต้อง

ไฟล์ MSBuildของเรามีการอ้างอิง UsingTask สำหรับ DLL ซึ่งทำการแทนที่นิพจน์ทั่วไป: (คุณสามารถใช้ DLL นี้ได้เนื่องจากครอบคลุมโดยใบอนุญาต MS-PL เช่นกัน)

  <การใช้งาน
     AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
     TaskName = "CodePlex.MSBuildTasks.RegexReplace" />

ต่อไปเราจะแยกหมายเลขบิลด์ซึ่งระบบ CI ให้มาโดยอัตโนมัติ นอกจากนี้คุณยังสามารถขอให้ผู้ให้บริการควบคุมแหล่งที่มาเพื่อระบุหมายเลขการแก้ไขซอร์สได้หากคุณต้องการ แต่เราพบว่า build # ในระบบ CI มีประโยชน์มากกว่าเพราะไม่เพียง แต่สามารถดูผลลัพธ์การรวมตามหมายเลขบิลด์ CI เท่านั้น แต่ยังมี เชื่อมโยงกลับไปยังชุดการเปลี่ยนแปลงที่รวมอยู่ในบิลด์

 <! - เรียงซ้อนพยายามหาหมายเลขบิลด์ ->

 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (BUILD_NUMBER) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (ccnetlabel) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> 0 </BuildNumber>
 </PropertyGroup>

(เราลอง BUILD_NUMBER ซึ่งมาจาก TeamCity ตามด้วย ccnetlabel ซึ่งมาจาก CC.net และหากไม่มีอยู่เราจะตั้งค่าเริ่มต้นเป็น 0 เพื่อให้เราสามารถทดสอบสคริปต์การสร้างอัตโนมัติได้ด้วยตนเอง)

ต่อไปเรามีภารกิจที่กำหนดหมายเลขบิลด์ลงในไฟล์ GlobalAssemblyInfo.cs ที่เราเชื่อมโยงไปยังโครงการทั้งหมดของเรา:

 <Target Name = "SetVersionNumber">
   <RegexReplace
       รูปแบบ = 'AssemblyVersion \ ("(\ d + \. \ d + \. \ d +) \. \ d +" \)'
       การแทนที่ = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       ไฟล์ = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </Target>

สิ่งนี้ค้นหาแอตทริบิวต์ AssemblyVersion และแทนที่หมายเลขเวอร์ชัน abcd ด้วย abcBuildNumber โดยปกติเราจะปล่อยให้แหล่งที่มาตรวจสอบในแผนภูมิโดยให้สามส่วนแรกของหมายเลขตัวสร้างคงที่และที่สี่เป็นศูนย์ (fe วันนี้คือ 1.0.2.0)

ในขั้นตอนการสร้างของคุณตรวจสอบให้แน่ใจว่างาน SetVersionNumber อยู่ก่อนงานสร้าง ในตอนท้ายเราใช้งาน Zip ของเราเพื่อบีบอัดผลลัพธ์ของบิลด์เพื่อให้เรามีประวัติของไบนารีสำหรับทุกบิลด์อัตโนมัติ


25

คุณสามารถทำได้โดยเพิ่มสิ่งต่อไปนี้ที่ใดก็ได้ในโค้ดของคุณ

$Id:$

ตัวอย่างเช่น @Jeff ทำ:

<div id="svnrevision">svn revision: $Id:$</div>

และเมื่อตรวจสอบในเซิร์ฟเวอร์แทนที่ $ Id: $ ด้วยหมายเลขการแก้ไขปัจจุบัน ฉันยังพบข้อมูลอ้างอิงนี้

นอกจากนี้ยังมี$ Date: $ , $ Rev: $ , $ Revision: $


คุณต้องตรวจสอบให้แน่ใจว่าไฟล์มีการตั้งค่าแอตทริบิวต์ svn: keywords ด้วยเช่นกันมิฉะนั้นจะไม่มีการแทนที่ $ Id $ ฯลฯ โดยอัตโนมัติ ดูนี้หน้า (เลื่อนลงไปที่ svn: keywords)
Michael Stum

1
ฉันเพิ่งลองสิ่งนี้โดยใช้ $ Rev $ และใช้งานได้ - ในระดับหนึ่ง ปัญหาคือดูเหมือนว่าจะอัปเดตคีย์เวิร์ดเมื่อไฟล์ที่ปรากฏอยู่มีการเปลี่ยนแปลงเท่านั้น ซึ่งหมายความว่าหากมีการเปลี่ยนแปลงกับโปรเจ็กต์ซึ่งไม่มีผลกับไฟล์ที่มี $ Rev $ อยู่ในนั้น (ในกรณีของฉันคือหน้าต้นแบบ ASP.NET ของฉัน) โปรเจ็กต์จะมีการแก้ไขที่สูงกว่าที่แสดงต่อผู้ใช้ . ใครมีความคิดเกี่ยวกับเรื่องนี้บ้าง? มีวิธีให้ SVN อัปเดตคีย์เวิร์ดในไฟล์อยู่เสมอหรือไม่?
Chris Roberts

5
สิ่งนี้จะไม่เพียงแค่ใส่หมายเลขการแก้ไขของการเปลี่ยนแปลงล่าสุดลงในไฟล์นั้น ๆ หรือไม่? ฉันลองตั้งค่าที่เก็บสองไฟล์และเปลี่ยนที่เก็บหนึ่งและลองทั้งเอ็กซ์พอร์ตและเช็คเอาต์และอีกไฟล์ยังคงอยู่ที่ 1 ในทั้งสองกรณี
Lasse V.Karlsen

lassevk ถูกต้องซึ่งจะเปลี่ยนแปลงเฉพาะเมื่อไฟล์เปลี่ยนไป
Bruno Lopes

การใช้ VisualSVN และ TortoiseSVN การเพิ่ม $ Id: $ ทำให้หน้าแสดงผล "$ Id: $" อาจเป็นประโยชน์ในการสังเกตว่าคำตอบนี้ทำงานภายใต้เซิร์ฟเวอร์ / ไคลเอนต์ใด
Travis

17

หากคุณกำลังใช้ASP.Net MVC(ตาม StackOverflow ไม่) ผมเคยเขียนเรื่องง่ายที่จะทำตามคำแนะนำ 3 ขั้นตอนเกี่ยวกับวิธีการที่จะได้รับโดยอัตโนมัติและแสดงการแก้ไข ไกด์ได้รับแรงบันดาลใจจากการคิดกับตัวเองเกี่ยวกับคำถามนี้! : o)


ฟังดูดี แต่ลิงค์เสีย!
Peter C

1
นี่เป็นทางออกที่ดีสำหรับเราในการแสดงเวอร์ชันโดยอัตโนมัติตามการแก้ไข SVN ของเรา ข้อดีอย่างหนึ่งคือไม่ต้องโทรไปที่เซิร์ฟเวอร์ SVN ของคุณ
Ben Elder

ลิงก์เสียหรือไซต์ไม่ทำงาน
Cacho Santa

1
ขอบคุณ @cacho แก้ไข - มันเป็นความผิดพลาดของเซิร์ฟเวอร์ [sic]; o)
แอนดรูว์

10

@ Balloon หากคุณใช้ TortoiseSVN คุณสามารถใช้โปรแกรมSubWCRevแบบแพ็กเกจได้ จะค้นหาสำเนาที่ใช้งานได้และบอกเพียงแค่ตัวเลขการแก้ไขสูงสุด เป็นที่ยอมรับว่านี่เป็นแนวทางฝั่งไคลเอ็นต์สำหรับปัญหาฝั่งเซิร์ฟเวอร์ แต่เนื่องจากเป็นโปรแกรมบรรทัดคำสั่งที่ดีคุณจึงควรจับเอาท์พุทเพื่อใช้งานได้ค่อนข้างง่าย


9

$revและอื่น ๆ เช่นเป็นการแก้ไขสำหรับแต่ละไฟล์ดังนั้นจึงไม่เปลี่ยนแปลงเว้นแต่ไฟล์จะเปลี่ยนไป หมายเลขบนหน้าเว็บคือ (เป็นไปได้มากว่าฉันจะสมมติที่นี่) หมายเลขแก้ไข svn สำหรับทั้งโครงการ ซึ่งแตกต่างจากการแก้ไขไฟล์ที่คนอื่นชี้ไป

ในกรณีนี้ฉันคิดว่า CCNET กำลังดึงหมายเลขการแก้ไขของโครงการและเขียนส่วนหนึ่งของหน้าเว็บด้วยหมายเลขนั้น โซลูชัน CI ใด ๆ ควรจะทำได้ตั้งค่าด้วยตัวเองด้วย CCNET และ Teamcity (แม้ว่าจะไม่ใช่หน้าเว็บ แต่เป็นการกำหนดเวอร์ชันการปรับใช้ / แอสเซมบลีโดยอัตโนมัติ)

ในการดำเนินการนี้ให้ใช้โซลูชัน CI ที่สนับสนุนหรือใช้กระบวนการสร้าง (MSbuild / Nant) ของคุณเพื่อจัดเก็บเวอร์ชันนั้นและเขียนลงในไฟล์ก่อนที่จะ "ปรับใช้"


5

หากต้องการเพิ่มคำตอบของ @ BradWilson: "คุณสามารถขอให้ผู้ให้บริการควบคุมแหล่งที่มาเพื่อระบุหมายเลขการแก้ไขแหล่งที่มาได้หากต้องการ"

เพื่อเชื่อมต่อ Subversion และ MSBuild: MSBuild Community Tasks Project

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.