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
#
# 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
# 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)
end
if not result then
@log.error( "Building job failed", Log::LV_USER)
+ write_log_url()
return false
end
end
end
if not result then
@log.error( "Building job failed", Log::LV_USER)
+ write_log_url()
return false
end
end
if not result then
@log.error( "Building job failed", Log::LV_USER)
+ write_log_url()
return false
end
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
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
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
#
# 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
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
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
#
# 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
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
# 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
# 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
# send build request
+ protected
def send_build_request(git_repos, os, is_rev_build, commit,local_pkgs)
result_files = []
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
result_files.push file_name
end
- # ddd list
- @log.output( l.strip, Log::LV_USER)
end
end
# 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
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
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