Changes in Jenkinsfile [aec9a67:d189e11]
- File:
-
- 1 edited
-
Jenkinsfile (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Jenkinsfile
raec9a67 rd189e11 1 1 2 //===========================================================================================================3 // Main compilation routine4 //===========================================================================================================5 //Compilation script is done here but environnement set-up and error handling is done in main loop6 def cfa_build() {7 build_stage 'Checkout'8 def install_dir = pwd tmp: true9 //checkout the source code and clean the repo10 sh "rm -rf * ${install_dir}/*"11 checkout scm12 2 13 build_stage 'Build'14 15 //Configure the conpilation (Output is not relevant)16 //Use the current directory as the installation target so nothing17 //escapes the sandbox18 //Also specify the compiler by hand19 sh "./configure CXX=${currentCC.cpp_cc} --with-backend-compiler=${currentCC.cfa_backend_cc} --prefix=${install_dir} > /dev/null"20 21 //Compile the project22 sh 'make -j 8 install'23 24 build_stage 'Test'25 26 //Run the tests from the example directory27 dir ('src/examples') {28 sh './runTests.sh'29 }30 31 build_stage 'Cleanup'32 33 //Cleanup the install dir34 sh "rm -rf ${install_dir}/*"35 }36 37 //===========================================================================================================38 // Helper classes/variables/routines to make the status and stage name easier to use39 //===========================================================================================================40 //Description of a compiler (Must be serializable since pipelines are persistent)41 class CC_Desc implements Serializable {42 public String cc_name43 public String cpp_cc44 public String cfa_backend_cc45 46 CC_Desc(String cc_name, String cpp_cc, String cfa_backend_cc) {47 this.cc_name = cc_name48 this.cpp_cc = cpp_cc49 this.cfa_backend_cc = cfa_backend_cc50 }51 }52 53 //Global Variables defining the compiler and at which point in the build we are54 // These variables are used but can't be declared before hand because of wierd scripting rules55 // @Field String currentCC56 // @Field String status_prefix57 58 //Wrapper to sync stage name and status name59 def build_stage(String name) {60 def stage_name = "${currentCC.cc_name} ${name}".trim()61 stage stage_name62 63 status_prefix = stage_name64 }65 66 //===========================================================================================================67 // Main loop of the compilation68 //===========================================================================================================69 3 node ('master'){ 70 4 71 5 def err = null 6 def stage_name 72 7 def log_needed = false 73 8 currentBuild.result = "SUCCESS" 74 9 75 10 try { 76 // //Prevent the build from exceeding 30 minutes77 // timeout(30) {78 //79 // //Wrap build to add timestamp to command line80 // wrap([$class: 'TimestamperBuildWrapper']) {81 11 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' 85 13 86 // } 87 // } 14 //checkout the source code and clean the repo 15 checkout scm 16 sh 'git clean -dfq' 88 17 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 89 46 } 90 47 91 //If an exception is caught we need to change the status and remember to92 //attach the build log to the email93 48 catch (Exception caughtError) { 94 //rethrow error later95 49 err = caughtError 50 log_needed = true 51 currentBuild.result = "FAILURE" 96 52 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 } 102 60 } 103 61 … … 113 71 } 114 72 115 //===========================================================================================================116 //Routine responsible of sending the email notification once the build is completed117 //===========================================================================================================118 73 def email(String status, boolean log) { 119 74 //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line … … 121 76 def project_name = (env.JOB_NAME =~ /(.+)\/.+/)[0][1].toLowerCase() 122 77 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 was125 generated because of a git hooks/post-receive script following126 a ref change was pushed to the repository containing127 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". 128 83 129 The branch ${env.BRANCH_NAME} has been updated.84 The branch ${env.BRANCH_NAME} has been updated. 130 85 131 Check console output at ${env.BUILD_URL} to view the results."""86 Check console output at ${env.BUILD_URL} to view the results.""" 132 87 133 88 // def config = new File('/u/cforall/software/cfa/cfa-cc/config').text
Note:
See TracChangeset
for help on using the changeset viewer.