From: donghee yang Date: Fri, 24 Aug 2012 01:55:09 +0000 (+0900) Subject: [Title] Modified to show error remote log urls X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a66beddb20b2e2ab86550aed2d39a6267d715236;p=sdk%2Ftools%2Fsdk-build.git [Title] Modified to show error remote log urls --- diff --git a/src/build_server/BuildJob.rb b/src/build_server/BuildJob.rb index 6e01ea8..8d37a47 100644 --- a/src/build_server/BuildJob.rb +++ b/src/build_server/BuildJob.rb @@ -510,6 +510,22 @@ class BuildJob end + def get_log_url() + # only when server support log url + if @server.job_log_url.empty? then + return "","" + end + + url = "#{@server.job_log_url}/#{@id}/log" + # if remote, the file existence must be checked + if File.exist? "#{@job_root}/remote_log" then + return url,"#{@server.job_log_url}/#{@id}/remote_log" + else + return url,"" + end + end + + # # PROTECTED METHODS # @@ -523,12 +539,15 @@ class BuildJob # checking build dependency if not @is_remote_job and not @is_internal_job and not check_build_dependency() then + if @is_internal_job then copy_log_file(@server.outgoing_path) end @status = "ERROR" return false end # clean build if not build() then + if @is_internal_job then copy_log_file(@server.outgoing_path) end + @status = "ERROR" return false end @@ -543,6 +562,7 @@ class BuildJob # copy result files to outgoing path if @is_internal_job then + copy_log_file(@server.outgoing_path) copy_result_files(@server.outgoing_path) elsif not @parent.nil? and not @is_rev_build_check_job then copy_result_files(@parent.source_path) @@ -822,6 +842,7 @@ class BuildJob end if not result then @log.error( "Building job failed", Log::LV_USER) + write_log_url() return false end end @@ -873,6 +894,7 @@ class BuildJob end if not result then @log.error( "Building job failed", Log::LV_USER) + write_log_url() return false end @@ -972,6 +994,7 @@ class BuildJob end if not result then @log.error( "Building job failed", Log::LV_USER) + write_log_url() return false end @@ -1049,6 +1072,16 @@ class BuildJob end + def copy_log_file(dst_path) + @log.info( "Copying log to #{dst_path}", Log::LV_USER) + + file = "#{@source_path}/../log" + FileUtils.copy_file(file,"#{dst_path}/remote_log") + + return true + end + + def get_local_package_of_dependency( dep, src_path ) # use the target os if not specified if dep.target_os_list.count != 0 then @@ -1133,4 +1166,15 @@ class BuildJob end + # write web url for log + private + def write_log_url() + url,remote_url = get_log_url() + if not url.empty? then + @log.info( " ** Log1: #{url}", Log::LV_USER) + end + if not remote_url.empty? then + @log.info( " ** Log2: #{remote_url}", Log::LV_USER) + end + end end diff --git a/src/build_server/MultiBuildJob.rb b/src/build_server/MultiBuildJob.rb index b41bfc7..de8b437 100644 --- a/src/build_server/MultiBuildJob.rb +++ b/src/build_server/MultiBuildJob.rb @@ -347,6 +347,15 @@ class MultiBuildJob end + def get_log_url() + # only when server support log url + if @server.job_log_url.empty? then + return "","" + end + + return "#{@server.job_log_url}/#{@id}/log","" + end + # # PROTECTED METHODS # @@ -394,7 +403,8 @@ class MultiBuildJob # check there is some error or cancel if stop_status == "FINISHED" and (job.status == "ERROR" or job.status == "CANCELED") then - + # write url + write_log_url(job) # cancel all other un-finished jobs @sub_jobs.each do |sub| if sub.status != "ERROR" and sub.status != "FINISHED" and @@ -454,4 +464,17 @@ class MultiBuildJob return true end + + # write web url for log + private + def write_log_url(job) + url,remote_url = job.get_log_url() + if not url.empty? then + @log.info( " ** Log1: #{url}", Log::LV_USER) + end + if not remote_url.empty? then + @log.info( " ** Log2: #{remote_url}", Log::LV_USER) + end + end + end diff --git a/src/build_server/RegisterPackageJob.rb b/src/build_server/RegisterPackageJob.rb index 83451fd..6d00fe5 100644 --- a/src/build_server/RegisterPackageJob.rb +++ b/src/build_server/RegisterPackageJob.rb @@ -350,6 +350,15 @@ class RegisterPackageJob end + def get_log_url() + # only when server support log url + if @server.job_log_url.empty? then + return "","" + end + + return "#{@server.job_log_url}/#{@id}/log","" + end + # # PROTECTED METHODS # diff --git a/src/build_server/RemoteBuilder.rb b/src/build_server/RemoteBuilder.rb index 1e5bb2a..f6e1b89 100644 --- a/src/build_server/RemoteBuilder.rb +++ b/src/build_server/RemoteBuilder.rb @@ -51,10 +51,11 @@ class RemoteBuilder # build def build( git_repos, source_path, os, is_rev_build, srcinfo, local_pkgs ) + @log.info( "Start to build on remote server...", Log::LV_USER ) # send local packages for pkg_path in local_pkgs @log.info( "Sending file... : #{pkg_path}", Log::LV_USER ) - result = send_binary_package( pkg_path ) + result = send_file_to_remote( pkg_path ) if not result then @log.error( "File transfering failed!", Log::LV_USER ) return false @@ -62,9 +63,15 @@ class RemoteBuilder end # send build request - @log.info( "Sending build request to remote server") + @log.info( "Sending build request to remote server...", Log::LV_USER ) result, result_files = send_build_request(git_repos, os, is_rev_build, srcinfo, local_pkgs) + + @log.info( "Receiving log file from remote server...", Log::LV_USER ) + if not receive_file_from_remote( "#{source_path}/../remote_log" ) then + @log.warn( "File transfering failed! : remote_log", Log::LV_USER ) + end + if not result then @log.error( "Building job on remote server failed!", Log::LV_USER ) return false @@ -73,9 +80,9 @@ class RemoteBuilder # receive binary package for file_name in result_files @log.info( "Receiving file from remote server : #{file_name}", Log::LV_USER ) - result = receive_binary_package( "#{source_path}/#{file_name}" ) + result = receive_file_from_remote( "#{source_path}/#{file_name}" ) if not result then - @log.error( "File transfering failed!", Log::LV_USER ) + @log.error( "File transfering failed! : #{file_name}", Log::LV_USER ) return false end end @@ -86,7 +93,8 @@ class RemoteBuilder # upload binary packages that is need to be overwrite # before remote package - def send_binary_package(file_path) + protected + def send_file_to_remote(file_path) # create client client = BuildCommClient.create( @addr, @port, @log ) if client.nil? then @@ -112,6 +120,7 @@ class RemoteBuilder # send build request + protected def send_build_request(git_repos, os, is_rev_build, commit,local_pkgs) result_files = [] @@ -133,6 +142,9 @@ class RemoteBuilder rev= is_rev_build ? "YES":"NO" if client.send("BUILD|GIT|#{git_repos}||#{os}|NO|YES|#{rev}|#{commit}|#{pkg_list}") then result = client.read_lines do |l| + # write log first + @log.output( l.strip, Log::LV_USER) + # check build result if l.include? "Job is stopped by ERROR" or l.include? "Error:" then @@ -146,8 +158,6 @@ class RemoteBuilder result_files.push file_name end - # ddd list - @log.output( l.strip, Log::LV_USER) end end @@ -159,7 +169,8 @@ class RemoteBuilder # receive binary package of remote server - def receive_binary_package(file_path) + protected + def receive_file_from_remote(file_path) # create client client = BuildCommClient.create( @addr, @port, @log ) if client.nil? then diff --git a/src/build_server/ReverseBuildChecker.rb b/src/build_server/ReverseBuildChecker.rb index bd2d344..f7aa897 100644 --- a/src/build_server/ReverseBuildChecker.rb +++ b/src/build_server/ReverseBuildChecker.rb @@ -152,6 +152,7 @@ class ReverseBuildChecker if not is_project_included?(failure_list, rev_prj, rev_os) then log.info( " * Reverse-build FAIL ... #{rev_prj.name}(#{rev_os}) (#{rev_job.id})", Log::LV_USER) failure_list.push [ rev_prj, rev_os ] + write_log_url(log, rev_job) end # if "exist on error" cancel all other jobs @@ -201,4 +202,17 @@ class ReverseBuildChecker return false end + + + # write web url for log + private + def self.write_log_url(log, job) + url,remote_url = job.get_log_url() + if not url.empty? then + log.info( " ** Log1: #{url}", Log::LV_USER) + end + if not remote_url.empty? then + log.info( " ** Log2: #{remote_url}", Log::LV_USER) + end + end end