2008-08-03 34 views
14

Tôi đang cố gắng thiết lập CruiseControl.net vào lúc này. Cho đến nay nó hoạt động tốt đẹp, nhưng tôi có một vấn đề với nhiệm vụ MSBuild.CruiseControl.net, msbuild,/p: OutputPath và CCNetArtifactDirectory

Theo số Documentation, nó chuyển CCNetArtifactDirectory sang MSBuild. Nhưng làm thế nào để sử dụng nó?

Tôi cố gắng này:

<buildArgs> 
    /noconsolelogger /p:OutputPath=$(CCNetArtifactDirectory)\test 
</buildArgs> 

Nhưng điều đó không làm việc. Trong thực tế, nó giết chết các dịch vụ với lỗi này:

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Reference to unknown symbol CCNetArtifactDirectory

Tài liệu là khá thưa thớt, và Google und chủ yếu cung cấp sửa đổi các tập tin dự án sln, đó là những gì tôi muốn tránh để có thể tự xây dựng dự án này sau - Tôi thực sự thích /p:OutputPath.

Trả lời

6

CCNetArtifactDirectory được chuyển vào MSBuild theo mặc định, do đó bạn không cần phải lo lắng về nó. MSBuild sẽ đặt đầu ra xây dựng trong "vị trí bin" có liên quan đến thư mục làm việc mà bạn đã chỉ định.

<executable>c:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable> 
<workingDirectory>C:\data\projects\FooSolution\</workingDirectory> 
<projectFile>FooSolution.sln</projectFile> 
<buildArgs>/noconsolelogger /p:Configuration=Debug </buildArgs> 

Vì vậy, trong ví dụ trên, đầu ra xây dựng của bạn sẽ được đặt trong C: \ data \ projects \ FooSolution [ProjectName] \ bin \ Debug. Nếu bạn muốn xuất ra một vị trí khác, bạn có thể muốn xem thẻ trong CCNET.

<publishers> 
    <xmllogger /> 
    <buildpublisher> 
    <sourceDir>C:\data\projects\FooSolution\FooProject\bin\Debug</sourceDir> 
    <publishDir>C:\published\FooSolution\</publishDir> 
    <useLabelSubDirectory>false</useLabelSubDirectory> 
    </buildpublisher> 
</publishers> 

Điều này sẽ cho phép bạn xuất bản kết quả của bạn đến một vị trí khác.

5

Bạn có thể sử dụng biến thư mục tạo tác bên trong tập lệnh MSBuild. Đây là một ví dụ về cách tôi đang chạy FxCop ngay từ kịch bản CC.Net MSBuild của tôi (kịch bản này là những gì CC.Net trỏ tới - đó cũng là một mục tiêu "Xây dựng" trong kịch bản bao gồm một nhiệm vụ MSBuild chống lại SLN làm việc biên soạn thực tế):

<Exec 
    Command='FxCopCmd.exe /project:"$(MSBuildProjectDirectory)\FXCopRules.FxCop" /out:"$(CCNetArtifactDirectory)\ProjectName.FxCop.xml"' 
    WorkingDirectory="C:\Program Files\Microsoft FxCop 1.35" 
    ContinueOnError="true" 
    IgnoreExitCode="true" 
/> 
2

Các tham số như CCNetArtifactDirectory được chuyển đến các chương trình bên ngoài bằng biến môi trường. Chúng có sẵn trong chương trình bên ngoài nhưng chúng không nằm trong cấu hình CCNET. Điều này thường dẫn đến sự nhầm lẫn.

Bạn có thể sử dụng hằng số tiền xử lý thay thế:

<cb:define project.artifactDirectory="C:\foo"> 
<project> 
    <!-- [...] --> 
    <artifactDirectory>$(project.artifactDirectory)</artifactDirectory> 
    <!-- [...] --> 
    <tasks> 
    <!-- [...] --> 
    <msbuild> 
     <!-- [...] --> 
     <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs> 
     <!-- [...] --> 
    </msbuild> 
    <!-- [...] --> 
    </tasks> 
    <!-- [...] --> 
</project> 
Các vấn đề liên quan