溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

實(shí)戰(zhàn) CruiseControl.NET+NAnt (二) - CC.NET中的觸發(fā)器

發(fā)布時(shí)間:2020-06-29 08:33:11 來源:網(wǎng)絡(luò) 閱讀:818 作者:瞿杰 欄目:編程語言

作者:Tony Qu

CC.NET的配置文件位于安裝目錄的server目錄下,有個(gè)叫做ccnet.config的文件,只有配置了這個(gè)文件,CC.NET才能正常運(yùn)行。

通過CCNetConfig我們可以學(xué)到很多關(guān)于ccnet.config的配置內(nèi)容,首先來看一個(gè)非常重要的概念——觸發(fā)器。

實(shí)戰(zhàn) CruiseControl.NET+NAnt (二) - CC.NET中的觸發(fā)器

值得注意的是,這里的觸發(fā)器都僅針對(duì)當(dāng)前項(xiàng)目有效,這也是為什么這些trigger基本沒有target,比如說IntervalTrigger,所有的屬性都沒有提到觸發(fā)的對(duì)象,。

CC.NET提供了6種觸發(fā)器:

IntervalTrigger,顧名思義,就是每隔一定時(shí)間觸發(fā)任務(wù)的觸發(fā)器。

FilterTrigger不能單獨(dú)工作,而必須與其他Trigger一起使用,之所以叫FilterTrigger是因?yàn)樗怯脕磉^濾觸發(fā)條件,例如我們?cè)驹O(shè)置了一個(gè)IntervalTrigger,每5分鐘觸發(fā)一次,但我只希望這個(gè)IntervalTrigger只在工作時(shí)間觸發(fā),那么我們就可以用FilterTrigger來限制IntervalTrigger的觸發(fā)時(shí)間為9:00 ~ 18:00。

MultiTrigger類似于WPF中的MultiTrigger,可同時(shí)執(zhí)行多個(gè)觸發(fā)器,并對(duì)觸發(fā)器結(jié)果做And或Or操作。

ScheduleTrigger和Windows自帶的計(jì)劃任務(wù)的功能非常類似,可以在特定時(shí)間觸發(fā)任務(wù)。

ProjectTrigger是僅當(dāng)指定的CC.NET項(xiàng)目build完成后才會(huì)觸發(fā)任務(wù)的觸發(fā)器。

UrlTrigger是僅當(dāng)某個(gè)特定的Url頁面的內(nèi)容發(fā)生變化時(shí)才會(huì)觸發(fā)任務(wù)的觸發(fā)器。

 

下面來舉個(gè)例子:

場(chǎng)景1:我希望設(shè)置一個(gè)daily build的觸發(fā)器,每天凌晨1:00觸發(fā)一次,僅工作日做,雙休日不做(不考慮節(jié)假日)。

由于是特定時(shí)間循環(huán)觸發(fā),我們可以用ScheduleTrigger來實(shí)現(xiàn),代碼如下:

<scheduleTrigger time="1:00" buildCondition="ForceBuild" name="ScheduledTask1">
  <weekDays>
    <weekDay>Monday</weekDay>
    <weekDay>Tuesday</weekDay>
    <weekDay>Wednesday</weekDay>
    <weekDay>Thursday</weekDay>
    <weekDay>Friday</weekDay>
  </weekDays>
</scheduleTrigger>

在CCNetConfig里面設(shè)置則如下圖所示:

實(shí)戰(zhàn) CruiseControl.NET+NAnt (二) - CC.NET中的觸發(fā)器

 

場(chǎng)景2: 持續(xù)集成需要每隔一定時(shí)間觸發(fā)一次build,已確定之前的checkin都是可運(yùn)行的,所以我們需要設(shè)定一個(gè)每周一到周五的工作時(shí)間(9:00 ~ 18:00)觸發(fā),并且每隔15分鐘觸發(fā)一次的觸發(fā)器(不考慮時(shí)區(qū)、時(shí)差問題)。

這里我們需要使用IntervalTrigger+FilterTrigger,F(xiàn)ilterTrigger是用于過濾時(shí)間的,即9:00 ~ 18:00。

<filterTrigger startTime="09:00" endTime="18:00">
    <trigger type="intervalTrigger" seconds="600" />
    <weekDays>
        <weekDay>Monday</weekDay>
        <weekDay>Tuesday</weekDay>
        <weekDay>Wednesday</weekDay>
        <weekDay>Thursday</weekDay>
        <weekDay>Friday</weekDay>
    </weekDays>
</filterTrigger>

在CCNetConfig里面設(shè)置則如下圖所示:

實(shí)戰(zhàn) CruiseControl.NET+NAnt (二) - CC.NET中的觸發(fā)器

場(chǎng)景3: 當(dāng)項(xiàng)目A的build成功之后才觸發(fā)當(dāng)前項(xiàng)目build(通常項(xiàng)目A是某個(gè)核心代碼庫,當(dāng)前項(xiàng)目對(duì)其具有依賴性),由于是僅當(dāng)成功才觸發(fā),所以triggerStatus=Success

<triggers>
  <projectTrigger project="task2">
    <triggerStatus>Success</triggerStatus>
    <innerTrigger type="intervalTrigger" seconds="1800" buildCondition="ForceBuild" />
  </projectTrigger>
</triggers>

在CCNetConfig里面設(shè)置則如下圖所示:

實(shí)戰(zhàn) CruiseControl.NET+NAnt (二) - CC.NET中的觸發(fā)器

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI