2009-10-21 2 views
0

У меня есть файл nant, который выполняет проект моего проекта. Как только сборка будет выполнена, я буду использовать свойство nant.onsuccess для отправки почты. В этом nant.onsuccess я буду вызывать следующую партию целей для сборки. Но мне нужно отправить почту в зависимости от успеха или неудачи этих наборов целей, которые вызывается из целевого объекта nant.onsuccess.Nant "nant.onsuccess" свойство

например:

 <?xml version="1.0" encoding="utf-8" ?> 
    <project name="Build.build" default="default"> 
    <property name="mail.mailhost" value="x"/> 
    <property name="mail.from" value="y"/> 
    <property name="mail.to" value="z"/> 
    <target name="default" description="Just like that"> 
     <echo message="Succeeded"/> 
     <echo message="Succeeded"/> 
     <property name="nant.onsuccess" value="suc"/> 
    </target> 

    <target name="suc" description="Just like that"> 
     <echo message="I am called"/> 
     <echo message="in success part"/> 
     <property name="nant.onsuccess" value="here"/> 
     <call target="testing"/> 
    </target> 
    <target name="testing"> 
     <echo message="I ammmmmmmmmm"/> 
     <property name="nant.onsuccess" value="here"/> 
    </target> 
    <target name="here"> 
    <echo message="I should not be called"/> 
    </target> 


    <target name="nant.onfailure"> 
    <if test="${string::get-length(mail.to) > 0}"> 
    <mail mailhost="${mail.mailhost}" from="${mail.from}" tolist="${mail.to}" 
    subject="Test mail on ${environment::get-variable('COMPUTERNAME')}."> 
    Note: this is ignored. 
    </mail> 
    </if> 
    </target> 
</project> 

    The target "here" should be called depending on whether the target "testing" is succeeded or not. 

Пожалуйста, дайте мне знать, как я ее достижения.

Спасибо, Priya

ответ

1

Первое, что нужно понять, как целевые зависимости могут контролировать выполнение. Вы, вероятно, можете сделать много всего, что вам нужно, просто используя зависимости. Прочитайте основные принципы NAnt page on targets.

Далее, если вам нужно выполнить много логики в зависимости от того, сбой какой-либо конкретной задачи, вы можете проверить задачу < trycatch> в проекте NAntContrib, который добавляет много полезных задач в NAnt. Задача trycatch позволяет получить большую гибкость, чем стандартная ошибка nant.onfailure.

1

Я не уверен, если это поможет. пожалуйста, посмотрите ниже ссылку.

Я собрал образец файла сборки.

https://stackoverflow.com/a/11365488/1060656

<description>Sample Build Scripts</description> 


<property name="nant.onsuccess" value="success" /> 
<property name="nant.onfailure" value="failure" /> 
<property name="tolist" value="[email protected]" /> 
<property name="cclist" value="[email protected]" /> 
<property name="emailsubject" value="" /> 


<target name="build" depends="init"> 

    YOUR ACTUAL BUILD CODE GOES HERE 

</target> 





<target name="init"> 

    <echo> 
    ----------------------------------------------------------------------------------------------------------------- 
    TASK : INITIALIZE 
    ----------------------------------------------------------------------------------------------------------------- 
    </echo> 

    <loadtasks assembly="nantcontrib-0.85/bin/NAnt.Contrib.Tasks.dll" />  
    <!-- http://www.basilv.com/psd/blog/2007/how-to-add-logging-to-ant-builds --> 
    <tstamp>    
     <formatter property="timestamp" pattern="yyMMdd_HHmm"/> 
    </tstamp> 

    <property name="build.log.filename" value="build_${timestamp}.log"/> 

    <echo message="build.log.filename: ${build.log.filename}" /> 

    <record name="${build.log.dir}/${build.log.filename}" action="Start" level="Verbose"/>   

    <echo message="Build logged to ${build.log.filename}"/> 

    <echo message="Build Start at: ${datetime::now()}" /> 

</target> 


<!--http://www.mail-archive.com/[email protected]/msg02485.html--> 
<target name="success" depends="successresult,sendemail">  
    <echo>${emailsubject}</echo> 
</target> 

    <!--http://www.mail-archive.com/[email protected]/msg02485.html--> 
<target name="failure" depends="failureresult,sendemail"> 
    <echo>${emailsubject}</echo>   
</target> 


<target name="successresult" > 
    <echo> 
     BUILD FAILED . CHANGE SUBJECT 
    </echo> 
    <property name="emailsubject" value="Web Integration DEV Build : SUCCESS !!!" />    
</target> 


<target name="failureresult" >  

    <echo>  
    BUILD FAILED . CHANGE SUBJECT  
    </echo> 
    <echo message="Task Start at: ${datetime::now()}" /> 

    <property name="emailsubject" value="Web Integration DEV Build : FAILED !!! :)" /> 
</target> 


<target name="sendemail" > 

    <echo>  
    ----------------------------------------------------------------------------------------------------------------- 
    SENDING EMAIL 
    ----------------------------------------------------------------------------------------------------------------- 

    </echo> 
    <echo message="Task Start at: ${datetime::now()}" /> 

    <echo>${emailsubject}</echo>  
    <echo>Sending Email</echo> 
    <echo>Attaching File : ${build.log.dir}/email_${build.log.filename}</echo> 
    <echo>Attaching File : ${path.vsshelper.log}/logs/email_${build.log.getlistoffiles}</echo> 

    <!-- Flush is very important before you copy --> 
    <record name="${build.log.dir}/${build.log.filename}"  action="Flush" level="Verbose"/> 
    <sleep milliseconds="1000" /> 
    <!-- make a copy --> 
    <copy file= "${build.log.dir}/${build.log.filename}" tofile="${build.log.dir}/email_${build.log.filename}" /> 

    <mail 
      from="${email.from}" 
      tolist="${email.to}" 
      mailhost="${email.host}" 
      message="${emailsubject}" 
      subject="${emailsubject}" 
    >    
      <attachments> 
       <include name="${build.log.dir}/email_${build.log.filename}" />     
       <include name="${path.vsshelper.log}/logs/email_${build.log.getlistoffiles}" /> 
      </attachments>    
    </mail> 

</target> 

4

После Nant закончил свою сборку он выполнит цель, указанную nant.onsuccess или nant.onfailure. Это происходит только один раз, поэтому, если вы измените свойства nant.onsucces/nant.onfailure, это не будет иметь никакого эффекта.

Как и другие плакаты указаны для реализации условной логики целевых зависимостей, < если> < trycatch> < выберите> и < NAnt> и < вызова> задачи вместе с , если/если атрибутами являются лучше подходит.

Смежные вопросы