diff --git a/app/controllers/dev_ops/builds_controller.rb b/app/controllers/dev_ops/builds_controller.rb index 0cf160a10..2474b1136 100644 --- a/app/controllers/dev_ops/builds_controller.rb +++ b/app/controllers/dev_ops/builds_controller.rb @@ -1,6 +1,6 @@ -class DevOps::BuildsController < ApplicationController +class ::DevOps::BuildsController < ApplicationController before_action :require_login - before_action :find_project + before_action :find_repo def index cloud_account = @repo.dev_ops_cloud_account @@ -37,7 +37,7 @@ class DevOps::BuildsController < ApplicationController end private - def find_project - @repo = Repository.find params[:id] + def find_repo + @repo = ::Repository.find params[:id] end end diff --git a/app/controllers/dev_ops/cloud_accounts_controller.rb b/app/controllers/dev_ops/cloud_accounts_controller.rb index 5acc6934f..ca506fa49 100644 --- a/app/controllers/dev_ops/cloud_accounts_controller.rb +++ b/app/controllers/dev_ops/cloud_accounts_controller.rb @@ -14,12 +14,12 @@ class DevOps::CloudAccountsController < ApplicationController logger.info "######### create_params: #{create_params}" - if cloud_account = @project.dev_ops_cloud_account + if cloud_account = @repo.dev_ops_cloud_account cloud_account else cloud_account = DevOps::CloudAccount.new(create_params) cloud_account.user = current_user - cloud_account.project_id = @project.id + cloud_account.repo_id = @repo.id cloud_account.save! end @@ -64,11 +64,10 @@ class DevOps::CloudAccountsController < ApplicationController private def devops_params - params.permit(:account, :secret, :ip_num, :project_id) + params.permit(:account, :secret, :ip_num, :repo_id) end def find_project - @project = Project.find_by_id params[:project_id] - render_not_found("未找到project_id为:#{params[:project_id]}相关的项目") if @project.blank? + @repo = Repository.find params[:repo_id] end end diff --git a/app/libs/dev_ops/drone/request.rb b/app/libs/dev_ops/drone/request.rb index 615e53b6e..6ce738a72 100644 --- a/app/libs/dev_ops/drone/request.rb +++ b/app/libs/dev_ops/drone/request.rb @@ -24,22 +24,22 @@ end def get(endpoint, path, options={}) - set_request_defaults(endpoint) + validate_request_params!(endpoint) request(:get, endpoint, path, options) end def post(endpoint, path, options={}) - set_request_defaults(endpoint) + validate_request_params!(endpoint) request(:post, endpoint, path, options) end def put(endpoint, path, options={}) - set_request_defaults(endpoint) + validate_request_params!(endpoint) request(:put, endpoint, path, options) end def delete(endpoint, path, options={}) - set_request_defaults(endpoint) + validate_request_params!(endpoint) request(:delete, endpoint, path, options) end @@ -47,27 +47,10 @@ def request(method, endpoint, path, **params) Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:secret).inspect}") - client = Faraday.new(path: domain) + client = Faraday.new(url: endpoint) response = client.public_send(method, path, params) - result = JSON.parse(response.body) - Rails.logger.info("[drone] response:#{response.status} #{result.inspect}") - - if response.status != 200 - raise DevOps::Drone::Error.parse(result) - end - - if result['errcode'].present? && result['errcode'].to_i.nonzero? - raise DevOps::Drone::Error.parse(result) - end - - result - end - - # Sets a base_uri and default_params for requests. - # @raise [Error::MissingCredentials] if endpoint not set. - def set_request_defaults(endpoint, private_token, sudo=nil) - raise "Please set an endpoint to API" unless endpoint + json_response(response) end # Checks the response code for common errors. @@ -89,8 +72,21 @@ response.parsed_response end + # Checks a base_uri and params for requests. + def validate_request_params!(endpoint) + raise "Please set an endpoint to API" unless endpoint + end + def error_message(response) "Server responded with code #{response.code}, message: #{response.parsed_response.message}. " \ "Request URI: #{response.request.base_uri}#{response.request.path}" end + + def json_response(response) + result = JSON.parse(response.body) + status = response.status + Rails.logger.info("[drone] response:#{status} #{result.inspect}") + + response.status != 200 ? result.merge!(status: response.status) : result + end end diff --git a/app/models/dev_ops/cloud_account.rb b/app/models/dev_ops/cloud_account.rb index 778335fb6..8b07a7493 100644 --- a/app/models/dev_ops/cloud_account.rb +++ b/app/models/dev_ops/cloud_account.rb @@ -1,7 +1,7 @@ class DevOps::CloudAccount < ApplicationRecord belongs_to :project belongs_to :user - belongs_to :repository + belongs_to :repository, foreign_key: :repo_id def drone_host [drone_ip, ":80"].join diff --git a/app/models/repository.rb b/app/models/repository.rb index ec6232927..373604c8a 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -3,7 +3,7 @@ class Repository < ApplicationRecord belongs_to :project, :touch => true belongs_to :user has_one :mirror, foreign_key: :repo_id - has_one :dev_ops_cloud_account, foreign_key: :repo_id + has_one :dev_ops_cloud_account, class_name: 'DevOps::CloudAccount', foreign_key: :repo_id has_many :version_releases, dependent: :destroy validates :identifier, presence: true diff --git a/config/routes.rb b/config/routes.rb index 709ff9073..5589b55b9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -22,13 +22,12 @@ Rails.application.routes.draw do get :common end end - resources :builds, only: :index do collection do get ':number', to: 'builds#detail', as: 'detail' - get ':number/logs/:stage/:step', to: 'builds#detail', as: 'logs' post ':number', to: 'builds#restart', as: 'restart' delete ':number', to: 'builds#delete', as: 'delete' + get ':number/logs/:stage/:step', to: 'builds#detail', as: 'logs' end end end