RSS Builds Publisher for CC.NET에 가서 최신 플러그인을 다운로드 받는다. 압축 해제한 파일을 CC .NET 서버 폴더(예. C:\Program Files\CruiseControl.NET\server\)에 놓는다.
이제 ccnet.config 설정 파일에 RSS Publisher를 등록한다. 이런 식이다.
<cruisecontrol> <project> <name>Money</name> <webURL>http://domain/ccnet</webURL> <workingDirectory>c:\src\Money</workingDirectory> <triggers> <intervalTrigger seconds="60"/> </triggers> <modificationDelaySeconds>2</modificationDelaySeconds> <sourcecontrol type="nullSourceControl"> </sourcecontrol> <tasks> <devenv> <solutionfile>C:\src\Money\MoneyTestApp.sln</solutionfile> <configuration>Debug</configuration> <buildtype>Build</buildtype> <executable>C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.exe</executable> </devenv> </tasks> <publishers> <rssBuilds encoding="utf-8" buildCondition="AllBuildConditions" addEnclosure="true"> <outputPath>C:\Program Files\CruiseControl.NET\webdashboard\rss\</outputPath> <fileName>$(ProjectName)</fileName> <!-- encoding : a valid encoding (default=utf-8). fileName : the file name with out the extension buildCondition : the BuildCondition in which the items will be added to the file. The default is AllBuildConditions addEnclosure : true will add an enclosure to the added item using {enclosureUrlFormat} --> <!-- Collection of namespaces added to the feed --> <rssExtensions> <namespace prefix="slash" namespaceURI="http://purl.org/rss/1.0/modules/slash/" /> <namespace prefix="test" namespaceURI="urn:test" /> </rssExtensions> <!-- the feed image --> <feedImage url="http://mydomain.com/images/logo.png" title="$(ProjectName)" link="$(ProjectUrl)" /> <!-- maximum number of items to keep in the main feed. all older items are moved to {filename}.history.xml --> <maxHistory>25</maxHistory> <channelUrl>$(ProjectUrl)</channelUrl> <itemUrl>http://mydomain.com/builds/$(Label)/$(ProjectName).$(Label).zip</itemUrl> <enclosureUrl>$(itemUrl)</enclosureUrl> <feedTitle>Builds for $(ProjectName)</feedTitle> <feedDescription>Build Report for $(ProjectName)</feedDescription> <itemTitle>$(ProjectName) $(Label)</itemTitle> <!-- Collection of rssElements that are added to the channel --> <feedElements> <!-- name : Required - Element name value : Required - Element Value prefix : Optional - Element Prefix. The prefix must be included in the rssExtensions or be one of the following: * dc * ci --> <rssElement name="webmaster" value="[email protected]" /> </feedElements> <!-- Collection of rssElements that are added to each item --> <itemElements> <rssElement prefix="dc" name="creator" value="Ryan" /> <rssElement prefix="test" name="sampleNode"> <attributes> <attribute name="attribute1" value="someValue" /> </attributes> <childElements> <rssElement prefix="test" name="anotherNode" value="anotherValue"> <attributes> <attribute name="anotherAttribute" value="some other value" /> </attributes> </rssElement> </childElements> </rssElement> </itemElements> <!-- A collection of categories that are added to each item --> <categories> <!-- name : Required - The category name --> <category name="NightlyBuilds" /> <category name="CC.NET" /> <category name="Publisher" /> <category name="$(ProjectName)" /> <category name="$(ProjectName) $(Label)" /> </categories> <!-- The string that is used as the item description before the modification comments. --> <descriptionHeader><![CDATA[<p>]]></descriptionHeader> <!-- The string that is used as the item description after the modification comments. --> <descriptionFooter> <![CDATA[</p> <p><a href="http://mydomain.com/builds/$(Label)/$(ProjectName).$(Label).zip">$(ProjectName) $(Label) Binaries</a><br /> <a href="http://mydomain.com/builds/$(Label)/$(ProjectName).$(Label).src.zip">$(ProjectName) $(Label) Source</a><br /> <a href="http://mydomain.com/builds/$(Label)/$(ProjectName).$(Label).msi.zip">$(ProjectName) $(Label) Installer</a><br /> </p>]]> </descriptionFooter> </rssBuilds> </publishers> <externalLinks> <externalLink name="RSS Feed!!!" url="http://domain/ccnet/rss/ProjectName.xml" /> </externalLinks> </project> </cruisecontrol>
여기서 주목할 부분은 <outputPath> 요소이다. 다른 경로로 잡아도 되겠지만, http://domain/ccnet/rss/projectname.xml 식의 주소를 쓴다고 가정한다. 그리고 마지막에 <externalLink> 요소에서 해당 RSS의 경로를 명시해주면, 대시보드에서 링크를 볼 수 있다.
우선 CC .NET 대시보드 폴더(예. C:\Program Files\CruiseControl.NET\webdashboard\)에 RSS 폴더를 하나 만든다. 그리고 여기에 Web.config 파일을 만들어 넣는데, 내용물은 이런 식으로 구성한다.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <httpHandlers> <add verb="*" path="*.aspx" type="System.Web.DefaultHttpHandler"/> <add verb="*" path="*.xml" type="System.Web.StaticFileHandler"/> <add verb="*" path="*" type="System.Web.HttpMethodNotAllowedHandler"/> </httpHandlers> <compilation defaultLanguage="c#" debug="true" /> <customErrors mode="ReadOnly" /> <trace enabled="false" requestLimit="10" pageOutput="true" traceMode="SortByTime" localOnly="true" /> <globalization requestEncoding="utf-8" responseEncoding="utf-8" /> </system.web> </configuration>
끝이다.
설정 파일 손쉽게 구성하기
CCNet Config라는 프로그램을 쓰면 CC .NET의 설정 파일을 만들기가 한결 쉬워진다. 더욱이 RSS Publisher까지 지원한다. 하지만 버전이 낮아서인지(현재 버전. 0.4.13.1 Production) 몇 가지 유의 사항이 있다.
-
64비트 윈도우에선 제대로 작동하지 않는 듯 하다. CC .NET 없이도 독립적으로 작동하므로 윈도우 XP에서 설정 파일을 만들어서 64비트 윈도우를 쓰는 서버에 업로드하는 방식을 쓰면 된다.
-
C:\Documents and Settings\UserName\Application Data\CCNetConfig\Settings.config 파일이 없다면서 오류를 내기도 한다. 명백한 버그인데, 해당 파일의 ‘숨김’ 속성을 제거해주면 된다.
-
처음엔 RSS Publisher를 메뉴에서 볼 수 없다. RSS Publisher를 설정하고 싶다면, [Tools – Options – Components]에서 RSS Publishser를 찾아서 선택하면 된다.
[…] CruiseControl .NET에 RSS 붙이기 […]