options[:rebuild] = (option[:rebuild] == "YES") ? true : false
options[:async] = (option[:async] == "YES") ? true : false
options[:monitor_level] = Log::LV_USER
+ options[:save] = option[:save]
+ if options[:save] then
+ options[:dock] = Utils.create_uniq_name()
+ options[:src_path] = Utils::WORKING_DIR
+ end
result = builder.build(options)
if not result then exit(-1) end
require 'utils'
class BuildClientUsage
- BUILD="build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email]"
+ BUILD="build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email] [--save]"
QUERY="build-cli query -d <server address>"
QUERY_SYSTEM="build-cli query-system -d <server address>"
QUERY_PROJECT="build-cli query-project -d <server address>"
options[:rebuild] = "YES"
end
+ options[:save] = false
+ opts.on( '--save', 'save the files built from remote server' ) do
+ options[:save] = true
+ end
+
opts.on( '-j', '--job <job number>', 'job number' ) do|job|
options[:job] = job
end
options[:output] = path
end
- options[:verbose] = "NO"
- opts.on( '-V', '--verbose', 'verbose mode' ) do
- options[:verbose] = "YES"
- end
-
opts.on( '-h', '--help', 'display help' ) do
opts.help.split("\n").each {|op| puts op if not op.include? "--noreverse" and not op.include? "--rebuild"}
exit
# "send_result_back" mean that server will send package file by network
@send_result_back = false
@dock_num = "0"
+ @result_files = []
@external_pkgs = []
@force_rebuild = false
def set_transfered_job( dock_num )
@is_verified = true
+ set_send_result_back( dock_num )
+ end
+
+
+ def set_send_result_back( dock_num )
@send_result_back = true
@dock_num = dock_num
end
+ def is_send_result_back?
+ return @send_result_back
+ end
+
+
+ def get_result_files()
+ return @result_files
+ end
+
# set force rebuild
# This make project to build
# even though there is a package of same version on pkg-server
# upload
if not @is_rev_build_check_job and not @send_result_back and
- @parent.nil? and
- not upload() then
+ @parent.nil? and not upload() then
+
@status = "ERROR"
return false
end
binpkg_path_list = Dir.glob("#{@source_path}/*_*_#{@os}.zip")
binpkg_path_list.each do |file|
+ @result_files.push File.basename(file)
@log.info( " * #{file}", Log::LV_USER)
FileUtils.ln(file,"#{dst_path}/", :force => true)
end
end
end
end
+ if not job.nil? and job.status == "FINISHED" and job.is_send_result_back? then
+ job.get_result_files().each do |file|
+ BuildCommServer.send(conn, "=JOB_FILE,#{file}")
+ end
+ end
rescue => e
@log.error e.message
@log.error e.backtrace.inspect
@pkgsvr_ip = nil
@pkgsvr_port = nil
@pkgsvr_password = nil
+
+ # "send_result_back" mean that server will send package file by network
+ @send_result_back = false
+ @dock_num = "0"
+ @result_files = []
end
end
end
+
+ def set_send_result_back( dock_num )
+ @send_result_back = true
+ @dock_num = dock_num
+ end
+
+
+ def is_send_result_back?
+ return @send_result_back
+ end
+
+
+ def get_result_files()
+ return @result_files
+ end
+
+
#
def init
@job_root = "#{@server.path}/jobs/#{@id}"
lock_event
# upload
- if not upload() then
+ if not @send_result_back and not upload() then
@status = "ERROR"
return
end
+ # copy result files to transport path
+ if @send_result_back then
+ puts "=========> 1"
+ copy_result_files_to_master()
+ puts "=========> 2"
+ end
+
# INFO. don't change this string
@log.info( "Job is completed!", Log::LV_USER)
@status = "FINISHED"
end
end
+
+ # copy binary package files and log file to transport dir
+ private
+ def copy_result_files_to_master()
+ outgoing_dir = "#{@server.transport_path}/#{@dock_num}"
+ if not File.exist? outgoing_dir then
+ FileUtils.mkdir_p outgoing_dir
+ end
+
+ @log.info( "Copying log to #{outgoing_dir}", Log::LV_USER)
+ file = "#{@source_path}/../log"
+ FileUtils.ln(file, "#{outgoing_dir}/remote_log",:force => true)
+
+ # copy result files, if not reverse build
+ return copy_result_files( outgoing_dir )
+ end
+
+
+ private
+ def copy_result_files(dst_path)
+ @log.info( "Copying result files to #{dst_path}", Log::LV_USER)
+
+ # get package path list
+ binpkg_path_list = Dir.glob("#{@source_path}/*_*_*.zip")
+
+ binpkg_path_list.each do |file|
+ @result_files.push File.basename(file)
+ @log.info( " * #{file}", Log::LV_USER)
+ FileUtils.ln(file,"#{dst_path}/", :force => true)
+ end
+
+ return true
+ end
+
end
options[:user] = "admin@user"
options[:is_rev_build] = @job.is_rev_build_check_job()
options[:dock] = Utils.create_uniq_name()
- options[:save_local] = @job.is_rev_build_check_job() ? false : true
+ options[:save] = @job.is_rev_build_check_job() ? false : true
ret = build( options )
# reset job
end
# receive binary package if not reverse build
- if options[:save_local] then
+ if options[:save] then
result_files.each do |file_name|
@log.info( "Receiving file from remote server : #{file_name}", Log::LV_USER )
result = receive_file_from_remote( "#{options[:src_path]}/#{file_name}", options[:dock] )
options[:user] = "admin@user"
options[:is_rev_build] = false
options[:rebuild] = false
- options[:save_local] = false
+ options[:save] = false
options[:async] = false
options[:monitor_level] = Log::LV_NORMAL
# format: BUILD|GIT|project_list|passwd|
# os|async|
# no_reverse|dist_name|
- # user_email|
- # rebuild
+ # user_email|rebuild
+ # internal|rev-build|commit|pkgs|dock_num
msg = "BUILD|GIT|#{options[:projects]}|#{options[:passwd]}|"+
"#{options[:os]}|"+
"#{options[:async] ? "YES" : "NO"}|"+
"#{options[:no_reverse] ? "YES" : "NO"}|#{options[:dist]}|"+
- "#{options[:user]}|"+
- "#{options[:rebuild] ? "YES" : "NO"}"
+ "#{options[:user]}|#{options[:rebuild] ? "YES" : "NO"}|"+
+ "NO||||#{options[:dock].nil? ? "" : options[:dock]}"
end
if not client.send( msg ) then
if line.nil? then
next
end
-
+ if line.strip.start_with?("=JOB_FILE") then
+ result_files.push( line.strip.split(",")[1] )
+ end
+
category, level, contents = JobLog.parse_log(line)
if level < min_level then next end
if category == "INFO" then
@log.info( contents, level )
- # gather result files if not reverse build
- if line =~ /Creating package file \.\.\. (.*)/ then
- file_name = $1
- result_files.push file_name
- end
elsif category == "WARN" then
@log.warn( contents, level )
elsif category == "ERROR" then
# set force rebuild if needed
if rebuild then new_job.set_force_rebuild(true) end
+ # set send result back
+ if dock_num != "0" and not is_internal then
+ new_job.set_send_result_back( dock_num )
+ end
+
@parent_server.jobmgr.commit_job(new_job)
# create logger and disconnect client
new_job = prj.create_new_job(os)
new_job.set_transfered_job( dock_num )
new_job.git_commit = git_commit
- incoming_dir = "#{@parent_server.transport_path}/#{dock_num}"
pkg_files.each do |file|
new_job.add_external_package( file )
end
-require "socket"
-require "timeout"
-
=begin
BuildComm.rb
$LOAD_PATH.unshift File.dirname(__FILE__)
require "log"
+require "socket"
require 'timeout'
require "net/ftp"
require 'thread'
Usage: build-cli <SUBCOMMAND> [OPTS] or build-cli (-h|-v)
Subcommands:
- build Build and create package.
- query Query information about build-server.
- query-system Query system information about build-server.
- query-project Query project information about build-server.
- query-job Query job information about build-server.
- query-log Query log contents about job in build-server.
- cancel Cancel a building project.
- register Register the package to the build-server.
+build Build and create package.
+query Query information about build-server.
+query-system Query system information about build-server.
+query-project Query project information about build-server.
+query-job Query job information about build-server.
+query-log Query log contents about job in build-server.
+cancel Cancel a building project.
+register Register the package to the build-server.
Subcommand usage:
-build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email]
+build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email] [--save]
build-cli query -d <server address>
build-cli query-system -d <server address>
build-cli query-project -d <server address>
-d, --address <server address> build server address: 127.0.0.1:2224
-o, --os <operating system> target operating system: ubuntu-32/ubuntu-64/windows-32/windows-64/macos-64
--async asynchronous job
+--save save the files built from remote server
-j, --job <job number> job number
-w, --passwd <password> password for managing project
-P, --pkg <package file> package file path
-t, --ftp <ftp server url> ftp server url: ftp://dibsftp:dibsftp@127.0.0.1
-U, --user <user email> user email infomation
--output <output_path> output file path
--V, --verbose verbose mode
-h, --help display help
-v, --version display version
--- /dev/null
+#PRE-EXEC
+echo "This case will test --save option"
+#EXEC
+../../build-cli build -N testa -d 127.0.0.1:2223 -o ubuntu-32 --save --rebuild
+#POST-EXEC
+#EXPECT
+Info: Added new job
+Info: Initializing job...
+Info: Checking package version ...
+Info: Invoking a thread for building Job
+Info: New Job
+Info: Checking build dependency ...
+Info: Checking install dependency ...
+Info: Started to build this job...
+Info: JobBuilder
+Info: Downloding client is initializing...
+Info: Installing dependent packages...
+Info: Downloading dependent source packages...
+Info: Make clean...
+Info: Make build...
+Info: Make install...
+Info: Generatiing pkginfo.manifest...
+Info: Zipping...
+Info: Creating package file ...
+Info: Checking reverse build dependency ...
+Info: * Will check reverse-build for projects: testb(ubuntu-32), testc(ubuntu-32)
+Info: * Added new job for reverse-build ... testb(ubuntu-32)
+Info: * Added new job for reverse-build ... testc(ubuntu-32)
+Info: * Reverse-build OK ...
+Info: * Reverse-build OK ...
+Info: Copying log to
+Info: Copying result files to
+Info: *
+Info: Job is completed!
+Info: Job is FINISHED successfully!
+Info: Updating the source info for project "testa"
+Info: Receiving file from remote server :
--- /dev/null
+#PRE-EXEC
+echo "This case will test --save option for MULTI build job"
+#EXEC
+../../build-cli build -N testa,testb -d 127.0.0.1:2223 -o ubuntu-32 --save --rebuild
+#POST-EXEC
+#EXPECT
+Info: Added new job
+Info: Initializing job...
+Info: Invoking a thread for MULTI-BUILD Job
+Info: New Job
+Info: Added new job "testa" for ubuntu-32!
+Info: Added new job "testb" for ubuntu-32!
+Info: * Sub-Job
+Info: * Sub-Job
+Info: * Sub-Job
+Info: * Sub-Job
+Info: Copying log to
+Info: Copying result files to
+Info: *
+Info: *
+Info: Job is completed!
+Info: Receiving file from remote server :
+Info: Receiving file from remote server :
build-cli-30.testcase
build-cli-31.testcase
build-cli-32.testcase
+build-cli-33.testcase
+build-cli-34.testcase