Tôi đang chuyển đổi nền tảng CI của chúng ta từ CruiseControl thành Jenkins, và dường như không tìm ra điều gì đó. làm (Disclaimer - tôi không có CI hoặc xây dựng chuyên gia tự động hóa, nhưng điều này đã được đổ vào lòng tôi và tôi thấy nó thú vị)Làm thế nào để khai báo một biến toàn cầu trong Jenkins và sử dụng nó trong một nhiệm vụ MSBuild trong mỗi dự án riêng lẻ
Trong CruiseControl, tôi có thể khai báo các biến như thế này:
<cb:define rootdir="J:\SOURCES\" />
<cb:define logdir="J:\SOURCES\buildlogs" />
<cb:define iisdir="J:\IIS\" />
<cb:define artifacts="artifacts\" />
Sau đó, sử dụng chúng như một phần của tác vụ MSBuild
<msbuild>
<executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
<workingDirectory>$(rootdir)$(ProjectName)</workingDirectory>
<projectFile>$(ProjectName).sln</projectFile>
<buildArgs>/p:BuildDate="1";OutDir="$(iisdir)$(ProjectName)\bin\\";WebProjectOutputDir="$(iisdir)$(ProjectName)\\"</buildArgs>
<targets>Rebuild;$(ProjectName)</targets>
<timeout>180</timeout>
<logger>C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
Nếu thư mục gốc hoặc thư mục IIS thay đổi, nó có thể dễ dàng được áp dụng cho tất cả các dự án cùng một lúc. Chúng tôi có ~ 60 dự án thiết lập, do đó, thực hiện dự án này theo dự án sẽ rất tốn thời gian. Di chuyển điều này sang Jenkins, các đối số dòng lệnh MSBuild bây giờ trông giống như thế này (một phần mẫu nhưng bao gồm những gì có liên quan):
OutDir="J:\IIS\ProjectName\bin\\";WebProjectOutputDir="J:\IIS\ProjectName\\"
Thư mục IIS được mã hóa cứng. Tôi cần điều đó giống như thế này:
OutDir="${IIS_DIR}\ProjectName\bin\\";WebProjectOutputDir="${ITEM_ROOTDIR}\ProjectName\\"
Có cách nào để làm điều đó không? Tôi đã thử plugin cắt cấu hình, điều này hữu ích nhưng không phù hợp với nhu cầu này từ những gì tôi thấy
Điều này làm việc cho tôi – TechDawg270