2012-09-10 23 views
10

Tôi hiện đang sử dụng "Số phiên bản Plug-in" của Jenkins để đặt Biến môi trường cho phiên bản xây dựng. Điều này hoạt động tốt trong jenkins nhưng tôi cần một cách để vượt qua điều này để MSBuild để số phiên bản của exe và dll được cập nhật. Tôi đã cố gắng dưới cấu hình nhưng nó không cập nhật được xây dựng phiên bảnSử dụng Biến môi trường phiên bản Jenkins trong bước MSBuild

Version Number Config

Build Config

Trả lời

5

Môi trường Tên biến nên được viết mà không phần trăm-dấu ('%'), như thế này :

VERSION 

ngoài việc đó, tôi nghĩ bạn nên làm tốt.

Cũng có thể xem xét thay đổi
${BUILDS_ALL_TIME}
để
${BUILDS_ALL_TIME, XX}

(điều này sẽ thực thi một hai chữ số build-số với số không hàng đầu)

+2

Vâng tôi đã hiểu điều đó, Ngoài ra có vẻ như phiên bản MSBuild.exe không hỗ trợ/p: theo mặc định. bạn cần phải lộn xộn xung quanh với phần mở rộng MSBuld. Tôi đã kết thúc chỉ viết một ứng dụng giao diện điều khiển để cập nhật AssemblyInfo.cs trước khi xây dựng và gọi nó đi qua trong biến môi trường. Điều này đã được nhanh hơn rối tung xung quanh với phần mở rộng msbuild phức tạp –

+0

Vâng, tôi đã hy vọng bạn DID tìm thấy một cách tốt đẹp để vượt qua các phiên bản để xây dựng, như chúng tôi cũng sử dụng một kịch bản phù hợp cho rằng ... – Gonen

2

Đây là một mục tiêu MSBuild thay thế sửa đổi số trong tệp GlobalAssemblyInfo.cs với biến SVN_REVISION từ Jenkins.

Chúng tôi có giải pháp đa dự án trong đó mỗi dự án tham chiếu cùng GlobalAssemblyInfo cho thông tin chung (như phiên bản). Sửa đổi điều này để nó phù hợp với thiết lập của bạn.

Bằng cách có điều kiện Exists mục tiêu thực hiện trên các máy phát triển mà MSBuildCommunityTasks chưa được cài đặt. Trong những trường hợp đó, số phiên bản trong GlobalAssemblyInfo.cs không bị ảnh hưởng.

<Target Name="InjectSVNRevision" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')"> 
<!-- When this build is done by the Jenkins CI server; the svn revision number is set in the environment variable SVN_REVISION 
    This little snippet replaces the revision number in GlobalAssemblyInfo.cs with this svn revision number 
    --> 
<Message Text="Injecting SVN revision number in GlobalAssemblyInfo.cs" /> 
<FileUpdate Files="GlobalAssemblyInfo.cs" 
    Multiline="true" 
    Singleline="false" 
    Regex="(AssemblyVersion|AssemblyFileVersionAttribute|AssemblyFileVersion)\(&quot;([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?&quot;\)" 
    ReplacementText="$1(&quot;$2.$(SVN_REVISION)&quot;)" 
    Condition="$(SVN_REVISION) != '' "/> 
</Target> 
1

Cách dễ nhất tôi đã tìm thấy để thực hiện việc này là sử dụng Change Assembly Version. Sử dụng plugin đó, bạn chỉ cần cung cấp số phiên bản (hoặc biến môi trường được sử dụng) và nó sẽ thay thế nó trong tất cả các tệp AssemblyInfo.cs trong vùng làm việc của bạn.

0

Một công việc rất nhanh xung quanh việc này là tạo tác vụ PowerShell trước tác vụ msbuild của bạn. Giả sử bạn đã xác định biến VERSION như trên (không có %%). Và bạn đã chọn xóa không gian làm việc trước khi bắt đầu xây dựng.

Đây là mã dành cho tác vụ powershell.

gci -rec -Filter *AssemblyInfo* | ForEach { (Get-Content $_.FullName) | ForEach-Object {$_ -replace "1.0.0.0",$env:VERSION } | Set-Content $_.FullName} 
Các vấn đề liên quan