Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Jenkinsfile

    raec9a67 rd189e11  
    11
    2 //===========================================================================================================
    3 // Main compilation routine
    4 //===========================================================================================================
    5 //Compilation script is done here but environnement set-up and error handling is done in main loop
    6 def cfa_build() {
    7         build_stage 'Checkout'
    8                 def install_dir = pwd tmp: true
    9                 //checkout the source code and clean the repo
    10                 sh "rm -rf * ${install_dir}/*"
    11                 checkout scm
    122
    13         build_stage 'Build'
    14 
    15                 //Configure the conpilation (Output is not relevant)
    16                 //Use the current directory as the installation target so nothing
    17                 //escapes the sandbox
    18                 //Also specify the compiler by hand
    19                 sh "./configure CXX=${currentCC.cpp_cc} --with-backend-compiler=${currentCC.cfa_backend_cc} --prefix=${install_dir} > /dev/null"
    20 
    21                 //Compile the project
    22                 sh 'make -j 8 install'
    23 
    24         build_stage 'Test'
    25 
    26                 //Run the tests from the example directory
    27                 dir ('src/examples') {
    28                         sh './runTests.sh'
    29                 }
    30 
    31         build_stage 'Cleanup'
    32 
    33                 //Cleanup the install dir
    34                 sh "rm -rf ${install_dir}/*"
    35 }
    36 
    37 //===========================================================================================================
    38 // Helper classes/variables/routines to make the status and stage name easier to use
    39 //===========================================================================================================
    40 //Description of a compiler (Must be serializable since pipelines are persistent)
    41 class CC_Desc implements Serializable {
    42         public String cc_name
    43         public String cpp_cc
    44         public String cfa_backend_cc
    45 
    46         CC_Desc(String cc_name, String cpp_cc, String cfa_backend_cc) {
    47                 this.cc_name = cc_name
    48                 this.cpp_cc = cpp_cc
    49                 this.cfa_backend_cc = cfa_backend_cc
    50         }
    51 }
    52 
    53 //Global Variables defining the compiler and at which point in the build we are
    54 // These variables are used but can't be declared before hand because of wierd scripting rules
    55 // @Field String currentCC
    56 // @Field String status_prefix
    57 
    58 //Wrapper to sync stage name and status name
    59 def build_stage(String name) {
    60         def stage_name = "${currentCC.cc_name} ${name}".trim()
    61         stage stage_name
    62 
    63                 status_prefix = stage_name
    64 }
    65 
    66 //===========================================================================================================
    67 // Main loop of the compilation
    68 //===========================================================================================================
    693node ('master'){
    704
    715        def err = null
     6        def stage_name
    727        def log_needed = false
    738        currentBuild.result = "SUCCESS"
    749
    7510        try {
    76                 // //Prevent the build from exceeding 30 minutes
    77                 // timeout(30) {
    78                 //
    79                 //      //Wrap build to add timestamp to command line
    80                 //      wrap([$class: 'TimestamperBuildWrapper']) {
    8111
    82                                 //Compile using gcc-4.9
    83                                 currentCC = new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9')
    84                                 cfa_build()
     12                stage 'Checkout'
    8513
    86                 //      }
    87                 // }
     14                        //checkout the source code and clean the repo
     15                        checkout scm
     16                        sh 'git clean -dfq'
    8817
     18                stage 'Build'
     19
     20                        stage_name = 'Build'
     21
     22                        //Clean the directory (Output is not relevant)
     23                        sh 'make clean > /dev/null'
     24
     25                        //Configure the conpilation (Output is not relevant)
     26                        //Use the current directory as the installation target so nothing
     27                        //escapes the sandbox
     28                        //Also specify the compiler by hand
     29                        def install_dir = pwd tmp: true
     30                        sh "CC=gcc-4.9 CXX=g++-4.9 ./configure --prefix=${install_dir} > /dev/null"
     31
     32                        //Compile the project
     33                        sh 'make -j 8 install'
     34
     35                stage 'Test'
     36
     37                        stage_name = 'Test'
     38
     39                        dir ('src/examples') {
     40                                sh './runTests.sh'
     41                        }
     42
     43                stage 'Cleanup'
     44
     45                        //install doesn't need to be cleaned since prefix uses temporary workspace
    8946        }
    9047
    91         //If an exception is caught we need to change the status and remember to
    92         //attach the build log to the email
    9348        catch (Exception caughtError) {
    94                 //rethrow error later
    9549                err = caughtError
     50                log_needed = true
     51                currentBuild.result = "FAILURE"
    9652
    97                 //An error has occured, the build log is relevent
    98                 log_needed = true
    99 
    100                 //Store the result of the build log
    101                 currentBuild.result = "${status_prefix} FAILURE".trim()
     53                switch(stage_name) {
     54                        case 'Test' :
     55                                currentBuild.result = "TEST FAILURE"
     56                                break
     57                        default :
     58                                break
     59                }
    10260        }
    10361
     
    11371}
    11472
    115 //===========================================================================================================
    116 //Routine responsible of sending the email notification once the build is completed
    117 //===========================================================================================================
    11873def email(String status, boolean log) {
    11974        //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
     
    12176        def project_name = (env.JOB_NAME =~ /(.+)\/.+/)[0][1].toLowerCase()
    12277
    123         def email_subject = "[${project_name} git][BUILD# ${env.BUILD_NUMBER} - ${status}] - branch ${env.BRANCH_NAME}"
    124         def email_body = """This is an automated email from the Jenkins build machine. It was
    125 generated because of a git hooks/post-receive script following
    126 a ref change was pushed to the repository containing
    127 the project "UNNAMED PROJECT".
     78        def email_subject = "[${project_name} git] UNNAMED PROJECT branch ${env.BRANCH_NAME} - Build # ${env.BUILD_NUMBER} - ${status}!"
     79        def email_body = """    This is an automated email from the Jenkins build machine. It was
     80        generated because of a git hooks/post-receive script following
     81        a ref change was pushed to the repository containing
     82        the project "UNNAMED PROJECT".
    12883
    129 The branch ${env.BRANCH_NAME} has been updated.
     84        The branch ${env.BRANCH_NAME} has been updated.
    13085
    131 Check console output at ${env.BUILD_URL} to view the results."""
     86        Check console output at ${env.BUILD_URL} to view the results."""
    13287
    13388        // def config = new File('/u/cforall/software/cfa/cfa-cc/config').text
Note: See TracChangeset for help on using the changeset viewer.