diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 23438d2e9..018254996 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -6,6 +6,10 @@ class Ci::CloudAccountsController < Ci::BaseController before_action :load_repo, only: %i[activate] before_action :find_cloud_account, only: %i[show] before_action :validate_params!, only: %i[create bind] + before_action only: %i[create bind] do + master_db = true + connect_to_ci_database(master_db) + end def create ActiveRecord::Base.transaction do diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 2935ea9aa..a0ffb4ce7 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -22,7 +22,10 @@ module Ci::CloudAccountManageable redirect_uri: gitea_oauth['redirect_uris'], gitea_oauth_id: gitea_oauth['id'], user_id: current_user.id) - oauth.save + oauth.save! + + # 初始化ci端数据库 + ci_db_structure!(@connection, "#{current_user.login}_drone") rpc_secret = SecureRandom.hex 16 logger.info "######### rpc_secret: #{rpc_secret}" @@ -43,25 +46,7 @@ module Ci::CloudAccountManageable redirect_url = "#{cloud_account.drone_url}/login" logger.info "######### redirect_url: #{redirect_url}" - if result && !result.blank? - # Ci::Schema.execute(username, password, port, host, database) - # con_result = @connection.execute(Ci::Schema.statement) - - Ci::Schema.sqls.split(';').map(&:strip).each do |sql| - con_result = @connection.execute(sql) - Rails.logger.info "=============> ci create tabels result: #{con_result}" - end - - - # if con_result.present? - # puts "==========> connection con_result: #{con_result}" - # else - # puts "----------创建ci数据库失败" - # end - cloud_account - else - nil - end + result && !result.blank? ? cloud_account : nil end def unbind_account! diff --git a/app/controllers/concerns/ci/db_connectable.rb b/app/controllers/concerns/ci/db_connectable.rb index d1c4c7a43..935d6473a 100644 --- a/app/controllers/concerns/ci/db_connectable.rb +++ b/app/controllers/concerns/ci/db_connectable.rb @@ -5,7 +5,7 @@ module Ci::DbConnectable end # Dynamically sets the database connection. - def connect_to_ci_database + def connect_to_ci_database(master_db=false) config = Rails.application.config_for(:configuration).symbolize_keys! db_config = config[:ci_db_server].symbolize_keys! raise 'ci database config missing' if db_config.blank? @@ -15,10 +15,22 @@ module Ci::DbConnectable username: db_config[:username], password: db_config[:password], port: db_config[:port], - database: "#{current_user.login}_drone" + database: master_db === true ? db_config[:database] : "#{current_user.login}_#{db_config[:database]}" } db_params = Ci::Database.get_connection_params(req_params) @connection = Ci::Database.set_connection(db_params) end + def ci_db_structure!(connection, database) + result = connection.execute("CREATE DATABASE #{database}") + return false unless result.present? + + # Ci::Schema.execute(username, password, port, host, database) + # con_result = @connection.execute(Ci::Schema.statement) + + Ci::Schema.statement.split(';').map(&:strip).each do |sql| + con_result = @connection.execute(sql) + Rails.logger.info "=============> ci create tabels result: #{con_result}" + end + end end