Changeset e01bfbc for Jenkinsfile
- Timestamp:
- Jun 3, 2016, 1:12:02 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 10a7775
- Parents:
- 2edd5502 (diff), aec9a67 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Jenkinsfile
r2edd5502 re01bfbc 1 1 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 2 12 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 //=========================================================================================================== 3 69 node ('master'){ 4 70 5 71 def err = null 6 def stage_name7 72 def log_needed = false 8 73 currentBuild.result = "SUCCESS" 9 74 10 75 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']) { 11 81 12 stage 'Checkout' 82 //Compile using gcc-4.9 83 currentCC = new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9') 84 cfa_build() 13 85 14 //checkout the source code and clean the repo 15 checkout scm 16 sh 'git clean -dfq' 86 // } 87 // } 17 88 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 nothing27 //escapes the sandbox28 //Also specify the compiler by hand29 def install_dir = pwd tmp: true30 sh "CC=gcc-4.9 CXX=g++-4.9 ./configure --prefix=${install_dir} > /dev/null"31 32 //Compile the project33 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 workspace46 89 } 47 90 91 //If an exception is caught we need to change the status and remember to 92 //attach the build log to the email 48 93 catch (Exception caughtError) { 94 //rethrow error later 49 95 err = caughtError 96 97 //An error has occured, the build log is relevent 50 98 log_needed = true 51 currentBuild.result = "FAILURE"52 99 53 switch(stage_name) { 54 case 'Test' : 55 currentBuild.result = "TEST FAILURE" 56 break 57 default : 58 break 59 } 100 //Store the result of the build log 101 currentBuild.result = "${status_prefix} FAILURE".trim() 60 102 } 61 103 … … 71 113 } 72 114 115 //=========================================================================================================== 116 //Routine responsible of sending the email notification once the build is completed 117 //=========================================================================================================== 73 118 def email(String status, boolean log) { 74 119 //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line … … 76 121 def project_name = (env.JOB_NAME =~ /(.+)\/.+/)[0][1].toLowerCase() 77 122 78 def email_subject = "[${project_name} git] UNNAMED PROJECT branch ${env.BRANCH_NAME} - Build # ${env.BUILD_NUMBER} - ${status}!"79 def email_body = """ 80 81 82 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". 83 128 84 129 The branch ${env.BRANCH_NAME} has been updated. 85 130 86 131 Check console output at ${env.BUILD_URL} to view the results.""" 87 132 88 133 // def config = new File('/u/cforall/software/cfa/cfa-cc/config').text
Note: See TracChangeset
for help on using the changeset viewer.