ftpsvr_username = ftp_result[2]
ftpsvr_passwd = ftp_result[3]
end
- pkgsvr_url = pkgsvr_addr = pkgsvr_port = nil
- if not option[:domain].nil? and not option[:url].nil? then
- svr_result = Utils.parse_server_addr(option[:domain])
- if svr_result.nil? or svr_result.length != 2 then
- puts "Server address is incorrect. (#{option[:domain]})"
- puts "Tune as following format."
- puts " <ip>:<port>"
- exit 1
- end
- pkgsvr_url = option[:url]
- pkgsvr_addr = svr_result[0]
- pkgsvr_port = svr_result[1]
- end
- BuildServerController.create_server( option[:name], Utils::WORKING_DIR, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd, pkgsvr_url, pkgsvr_addr, pkgsvr_port )
+ BuildServerController.create_server( option[:name], Utils::WORKING_DIR, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd )
when "remove"
BuildServerController.remove_server( option[:name] )
+ when "migrate"
+ BuildServerController.migrate_server( option[:name], option[:db_dsn], option[:db_user], option[:db_passwd] )
when "start"
if( option[:child] ) then # Child Process
BuildServerController.start_server( option[:name], option[:port] )
attr_accessor :pkg_sync_period
attr_accessor :changelog_check
attr_accessor :db
- attr_accessor :db_dsn, :db_user, :db_passwd
+ attr_accessor :db_dsn, :db_user, :db_passwd, :db_version
CONFIG_ROOT = "#{Utils::HOME}/.build_tools/build_server"
HOST_OS = Utils::HOST_OS
@db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
@db_user = nil
@db_passwd = nil
+ @db_version = 1
+
+ #DB upgrade SQL command
+ @db_migrate = []
+ #@db_migrate[0]= ["CREATE TABLE test(value INTEGER)", "INSERT INTO test (value) VALUES('3')"]
end
return @jobmgr.has_waiting_jobs
end
+ def get_dbversion
+ db_version = nil
+ begin
+ db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd)
+ db_version = db.select_one("SELECT (version) FROM db")[0]
+ rescue DBI::DatabaseError => e
+ #puts e.errstr
+ ensure
+ db.disconnect if db
+ end
+ return db_version
+ end
- def db_exist?
- if File.exist? "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" then
- return true
- else
- return false
+ def db_upgrade
+ result = true
+ create = false
+ begin
+ db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd)
+ db_version = db.select_one("SELECT (version) FROM db")[0]
+ if db_version.nil? then
+ create = true
+ else
+ list = @db_migrate[db_version..@db_version]
+ if not list.nil? then
+ list.each do |sql_list|
+ sql_list.each do |sql|
+ db.do sql
+ end
+ end
+ end
+ end
+ rescue DBI::DatabaseError => e
+ puts e.errstr
+ result = false
+ ensure
+ db.disconnect if db
end
+ if create then create_db end
+ return result
end
else inc="AUTOINCREMENT"
end
+ # remove table
+ db.tables.each do |table|
+ db.do "DROP TABLE #{table}"
+ end
+
# create table
- db.do "CREATE TABLE IF NOT EXISTS distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64), status VARCHAR(32) DEFAULT 'OPEN')"
- db.do "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY #{inc}, svr_addr VARCHAR(64))"
- db.do "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY #{inc}, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))"
- db.do "CREATE TABLE IF NOT EXISTS supported_os(name VARCHAR(32) PRIMARY KEY)"
+ db.do "CREATE TABLE db(version INTEGER )"
+ db.do "INSERT INTO db (version) VALUES('#{@db_version}')"
+ db.do "CREATE TABLE distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64), status VARCHAR(32) DEFAULT 'OPEN')"
+ db.do "CREATE TABLE remote_build_servers(id INTEGER PRIMARY KEY #{inc}, svr_addr VARCHAR(64))"
+ db.do "CREATE TABLE sync_pkg_servers(id INTEGER PRIMARY KEY #{inc}, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))"
+ db.do "CREATE TABLE supported_os(name VARCHAR(32) PRIMARY KEY)"
# USERS/GROUPS
- db.do "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY #{inc}, email VARCHAR(256), password_hash VARCHAR(256), password_salt VARCHAR(256), name VARCHAR(256), group_id INTEGER)"
- db.do "CREATE TABLE IF NOT EXISTS groups(id INTEGER PRIMARY KEY #{inc}, name VARCHAR(256))"
- db.do "CREATE TABLE IF NOT EXISTS group_project_accesses(group_id INTEGER, prj_id INTEGER, build VARCHAR(32))"
+ db.do "CREATE TABLE users(id INTEGER PRIMARY KEY #{inc}, email VARCHAR(256), password_hash VARCHAR(256), password_salt VARCHAR(256), name VARCHAR(256), group_id INTEGER)"
+ db.do "CREATE TABLE groups(id INTEGER PRIMARY KEY #{inc}, name VARCHAR(256))"
+ db.do "CREATE TABLE group_project_accesses(group_id INTEGER, prj_id INTEGER, build VARCHAR(32))"
# PROJECTS
- db.do "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32), ptype VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))"
- db.do "CREATE TABLE IF NOT EXISTS project_os(prj_id INTEGER, os_name VARCHAR(32))"
- db.do "CREATE TABLE IF NOT EXISTS project_gits(prj_id INTEGER, git_repos VARCHAR(128), git_branch VARCHAR(32))"
- db.do "CREATE TABLE IF NOT EXISTS project_sources(prj_id INTEGER, pkg_ver VARCHAR(64), location VARCHAR(256))"
- db.do "CREATE TABLE IF NOT EXISTS project_bins(prj_id INTEGER, pkg_name VARCHAR(64))"
- db.do "CREATE TABLE IF NOT EXISTS project_packages(prj_id INTEGER, pkg_ver VARCHAR(64), pkg_name VARCHAR(64), pkg_os VARCHAR(32))"
+ db.do "CREATE TABLE projects(id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32), ptype VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))"
+ db.do "CREATE TABLE project_os(prj_id INTEGER, os_name VARCHAR(32))"
+ db.do "CREATE TABLE project_gits(prj_id INTEGER, git_repos VARCHAR(128), git_branch VARCHAR(32))"
+ db.do "CREATE TABLE project_sources(prj_id INTEGER, pkg_ver VARCHAR(64), location VARCHAR(256))"
+ db.do "CREATE TABLE project_bins(prj_id INTEGER, pkg_name VARCHAR(64))"
+ db.do "CREATE TABLE project_packages(prj_id INTEGER, pkg_ver VARCHAR(64), pkg_name VARCHAR(64), pkg_os VARCHAR(32))"
# JOBS
- db.do "CREATE TABLE IF NOT EXISTS jobs(id INTEGER PRIMARY KEY, jtype VARCHAR(32), os_name VARCHAR(32), user_id INTEGER, parent_job_id INTEGER, status VARCHAR(32), prj_id INTEGER, dist_name VARCHAR(32), start_time VARCHAR(32), end_time VARCHAR(32) )"
+ db.do "CREATE TABLE jobs(id INTEGER PRIMARY KEY, jtype VARCHAR(32), os_name VARCHAR(32), user_id INTEGER, parent_job_id INTEGER, status VARCHAR(32), prj_id INTEGER, dist_name VARCHAR(32), start_time VARCHAR(32), end_time VARCHAR(32) )"
rescue DBI::DatabaseError => e
puts "DB Creation failed!"
def get_db_connection()
if not @db.nil? and @db.connected? then return @db end
- if not @db.nil? then
- @db.disconnect
+ if not @db.nil? then
+ @db.disconnect
@db = nil
end
@db = db
return @db
end
-
end
@@instance_map = {}
# create
- def self.create_server (id, path, ftpsvr_addr=nil, ftpsvr_port=nil, ftpsvr_username=nil, ftpsvr_passwd=nil, pkgsvr_url=nil, pkgsvr_addr=nil, pkgsvr_port=3333 )
+ def self.create_server (id, path, ftpsvr_addr=nil, ftpsvr_port=nil, ftpsvr_username=nil, ftpsvr_passwd=nil)
# check server config root
check_build_server_root
# set logger
@@instance_map[id].log = Log.new( "#{BuildServer::CONFIG_ROOT}/#{id}/log" )
- # add distribution
- if not pkgsvr_url.nil? then
- @@instance_map[id].distmgr.add_distribution("BASE", pkgsvr_url, pkgsvr_addr, pkgsvr_port)
- end
-
puts "Created new build server: \"#{id}\""
return @@instance_map[id]
end
end
end
+ def self.migrate_server (id, dsn, user, passwd)
+ # set DB environment
+ server = get_server(id)
+ server.db_dsn = dsn if not dsn.nil?
+ server.db_user = user if not user.nil?
+ server.db_passwd = passwd if not passwd.nil?
+
+ # check db
+ if migrate_db(server) then
+ write_server_config(server)
+ end
+ end
+
+ def self.migrate_db (server)
+ version = server.get_dbversion
+ if version.nil? then server.create_db end
+ return server.db_upgrade
+ end
# get
def self.get_server( id )
# start server
def self.start_server( id, port = 2222 )
server = get_server(id)
+ migrate_db(server)
# write run port
server_dir = "#{BuildServer::CONFIG_ROOT}/#{server.id}"
# server
server = get_server(id)
+ migrate_db(server)
client = BuildCommClient.create( "127.0.0.1", server.port )
if client.nil? then
puts "Server is not running!"
# server
server = get_server(id)
+ migrate_db(server)
client = BuildCommClient.create( "127.0.0.1", server.port )
if client.nil? then
puts "Server is not running!"
def self.request_upgrade_server( id )
server = get_server(id)
+ migrate_db(server)
server_dir = "#{BuildServer::CONFIG_ROOT}/#{id}"
if File.exist? "#{server_dir}/friends" then
# add friend server
def self.add_remote_server( id, ip, port )
server = get_server(id)
+ migrate_db(server)
# add
if server.add_remote_server( ip, port ) then
# remove friend server
def self.remove_remote_server( id, ip, port )
server = get_server(id)
+ migrate_db(server)
# add
if server.remove_remote_server( ip, port ) then
def self.add_target_os( id, os_name )
# get server
server = get_server(id)
+ migrate_db(server)
# add
if server.add_supported_os( os_name ) then
def self.remove_target_os( id, os_name )
# get server
server = get_server(id)
+ migrate_db(server)
# add
if server.remove_supported_os( os_name ) then
def self.add_distribution( id, dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port )
# get server
server = get_server(id)
+ migrate_db(server)
# add
if server.distmgr.add_distribution( dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port ) then
def self.remove_distribution( id, dist_name )
# get server
server = get_server(id)
+ migrate_db(server)
# remove
if server.distmgr.remove_distribution( dist_name ) then
def self.lock_distribution(id, dist_name)
# get server
server = get_server(id)
+ migrate_db(server)
# remove
if server.distmgr.set_distribution_lock(dist_name, true) then
def self.unlock_distribution(id, dist_name)
# get server
server = get_server(id)
+ migrate_db(server)
# remove
if server.distmgr.set_distribution_lock(dist_name, false) then
# add remote package server
def self.add_sync_package_server(id, url, dist_name)
server = get_server(id)
+ migrate_db(server)
# check distribution
dist_name = check_distribution_name(dist_name, server)
# remove remote package server
def self.remove_sync_package_server(id, url, dist_name)
server = get_server(id)
+ migrate_db(server)
# check distribution
dist_name = check_distribution_name(dist_name, server)
passwd, os_string, dist_name )
# get server
server = get_server(id)
+ migrate_db(server)
# get supported os for project.
# if not specified, all supported os of the server will be used
def self.add_binary_project( id, project_name, pkg_name, passwd, os_string, dist_name )
# get server
server = get_server(id)
+ migrate_db(server)
# get supported os for project.
# if not specified, all supported os of the server will be used
def self.remove_project( id, project_name, dist_name )
# get server
server = get_server(id)
+ migrate_db(server)
# check distribution
dist_name = check_distribution_name(dist_name, server)
# server
server = get_server(id)
+ migrate_db(server)
# check distribution
dist_name = check_distribution_name(dist_name, server)
def self.register_package(id, file_path, dist_name)
# server
server = get_server(id)
+ migrate_db(server)
# check distribution
dist_name = check_distribution_name(dist_name, server)
# server
def self.query_server( id )
server = get_server(id)
+ migrate_db(server)
server.prjmgr.load()
puts "* REMOTE SERVER(S) *"
f.puts "DB_USER=#{server.db_user}"
f.puts "DB_PASSWORD=#{server.db_passwd}"
end
-
- # save to server.db
- if not server.db_exist? then
- server.create_db()
- end
end
obj.db_passwd = db_passwd
# save config
- write_server_config( obj )
+ #write_server_config( obj )
# create object & return it
return obj
require 'utils'
class BuildServerUsage
- CREATE="build-svr create -n <server name> [-t <ftp server url>] [-u <package server url> -d <package server address>]"
+ CREATE="build-svr create -n <server name> [-t <ftp server url>]"
REMOVE="build-svr remove -n <server name>"
+ MIGRATE="build-svr migrate -n <server name> [--dsn <db dsn> [--dbuser <db_user> --dbpassword <db_password>] ]"
START="build-svr start -n <server name> -p <port>"
STOP="build-svr stop -n <server name>"
UPGRADE="build-svr upgrade -n <server name>"
raise ArgumentError, "Usage: " + BuildServerUsage::REMOVE
end
+ when "migrate"
+ if options[:name].nil? or options[:name].empty? then
+ raise ArgumentError, "Usage: " + BuildServerUsage::MIGRATE
+ end
+
when "start"
if options[:name].nil? or options[:name].empty? or
options[:port].nil? then
+ "\n" + "Subcommands:" + "\n" \
+ "\t" + "create Create the build-server." + "\n" \
+ "\t" + "remove Remove the build-server." + "\n" \
+ + "\t" + "migrate build-server DB migrate." + "\n" \
+ "\t" + "start Start the build-server." + "\n" \
+ "\t" + "stop Stop the build-server." + "\n" \
+ "\t" + "upgrade Upgrade the build-server include friends." + "\n" \
+ "\n" + "Subcommand usage:" + "\n" \
+ "\t" + BuildServerUsage::CREATE + "\n" \
+ "\t" + BuildServerUsage::REMOVE + "\n" \
+ + "\t" + BuildServerUsage::MIGRATE + "\n" \
+ "\t" + BuildServerUsage::START + "\n" \
+ "\t" + BuildServerUsage::STOP + "\n" \
+ "\t" + BuildServerUsage::UPGRADE + "\n" \
options[:attr] = attr
end
+ options[:db_dsn] = nil
+ opts.on( '--dsn <dsn>', 'Data Source Name ex) mysql:host=localhost;database=test' ) do |dsn|
+ options[:db_dsn] = dsn
+ end
+
+ options[:db_user] = nil
+ opts.on( '--dbuser <user>', 'DB user id' ) do |user|
+ options[:db_user] = user
+ end
+
+ options[:db_passwd] = nil
+ opts.on( '--dbpassword <password>', 'DB password' ) do |password|
+ options[:db_passwd] = password
+ end
+
+
opts.on( '-V', '--value <value>', 'value' ) do |value|
options[:value] = value
end
cmd = ARGV[0]
if cmd.eql? "create" or cmd.eql? "remove" or
cmd.eql? "start" or cmd.eql? "upgrade" or
- cmd.eql? "stop" or
+ cmd.eql? "stop" or cmd.eql? "migrate" or
cmd.eql? "add-svr" or cmd.eql? "remove-svr" or
cmd.eql? "add-os" or cmd.eql? "remove-os" or
cmd.eql? "add-dist" or cmd.eql? "remove-dist" or
../../build-svr remove -n testserver3
mkdir buildsvr01
cd buildsvr01
-${RUBY} ../../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
+${RUBY} ../../../build-svr create -n testserver3
cd ..
-
+${RUBY} ../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/pkgsvr01/unstable -d 127.0.0.1:3333
${RUBY} ../../build-svr add-svr -n testserver3 -d 127.0.0.1:2224
${RUBY} ../../build-svr add-os -n testserver3 -o ubuntu-32
${RUBY} ../../build-svr add-os -n testserver3 -o windows-32
Subcommands:
create Create the build-server.
remove Remove the build-server.
+migrate build-server DB migrate.
start Start the build-server.
stop Stop the build-server.
upgrade Upgrade the build-server include friends.
get-attr Get build server atribute.
Subcommand usage:
-build-svr create -n <server name> [-t <ftp server url>] [-u <package server url> -d <package server address>]
+build-svr create -n <server name> [-t <ftp server url>]
build-svr remove -n <server name>
+build-svr migrate -n <server name> [--dsn <db dsn> [--dbuser <db_user> --dbpassword <db_password>] ]
build-svr start -n <server name> -p <port>
build-svr stop -n <server name>
build-svr upgrade -n <server name>
-w, --passwd <password> password for managing project
-t, --ftp <ftp server url> ftp server url: ftp://dibsftp:dibsftp@127.0.0.1:1024
-A, --attr <attribute name> attribute
+--dsn <dsn> Data Source Name ex) mysql:host=localhost;database=test
+--dbuser <user> DB user id
+--dbpassword <password> DB password
-V, --value <value> value
-h, --help display this information
-v, --version display version
#PRE-EXEC
rm -rf buildsvr01
mkdir buildsvr01
-cd buildsvr01; ../../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr create -n testserver3 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
#EXEC
../../build-svr add-svr -n testserver3 -d 127.0.0.1:2223
../../build-svr query -n testserver3
#PRE-EXEC
mkdir buildsvr01
rm -rf ~/.build_tools/build_server/testserver3
-cd buildsvr01; ../../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr create -n testserver3 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
../../build-svr start -n testserver3 -p 2223 &
#EXEC
sleep 1
#PRE-EXEC
rm -rf buildsvr01
mkdir buildsvr01
-cd buildsvr01; ../../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr create -n testserver3 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
../../build-svr add-os -n testserver3 -o linux
#EXEC
../../build-svr add-prj -n testserver3 -N testa -g test_git -b test_branch
#PRE-EXEC
rm -rf buildsvr01
mkdir buildsvr01
-cd buildsvr01; ../../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr create -n testserver3 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
#EXEC
../../build-svr add-prj -n testserver3 -N testa -g test_git -b test_branch -w 1111
#POST-EXEC
rm -rf buildsvr01
rm -rf ~/.build_tools/build_server/testserver3
mkdir buildsvr01
-cd buildsvr01; ../../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://ftpuser:ftpuser@127.0.0.1
+cd buildsvr01; ../../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@127.0.0.1
+cd buildsvr01; ../../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
../../build-svr add-os -n testserver3 -o linux
#EXEC
../../build-svr add-prj -n testserver3 -N testx -g test_git -b test_branch -o linux
#PRE-EXEC
rm -rf buildsvr01
mkdir buildsvr01
-cd buildsvr01; ../../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr create -n testserver3 -t ftp://dibsftp:coreps2@172.21.111.132
+cd buildsvr01; ../../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
#EXEC
../../build-svr add-os -n testserver3 -o linux
../../build-svr query -n testserver3
#PRE-EXEC
rm -rf buildsvr01
mkdir buildsvr01
-cd buildsvr01; ../../../build-svr create -n testserver3 -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333 -t ftp://ftpuser:ftpuser@172.21.111.124
+cd buildsvr01; ../../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@172.21.111.124
+cd buildsvr01; ../../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/../pkgsvr01/unstable -d 127.0.0.1:3333
../../build-svr add-os -n testserver3 -o linux
mkdir -p bin
cp ../bin/bin_0.0.0_linux.zip bin/bin_0.0.0_wrongosname.zip