创建多条流水线、模板管理

This commit is contained in:
victor
2021-01-26 17:15:53 +08:00
parent 131ccc36c7
commit 6c77b73ec6
22 changed files with 476 additions and 123 deletions

View File

@@ -11,4 +11,6 @@ class Ci::Build < Ci::RemoteBase
scope :pending, -> { by_status('pending') }
scope :killed, -> { by_status('killed') }
scope :by_status, ->(status) { where(build_status: status) }
scope :by_branch, ->(branch) { where(build_target: branch) }
end

View File

@@ -4,10 +4,10 @@ class Ci::Perm < Ci::RemoteBase
belongs_to :user, class_name: 'Ci::User', foreign_key: :perm_user_id
belongs_to :repo, class_name: 'Ci::Repo', foreign_key: :perm_repo_uid
def self.auto_create!(user, repo)
def self.auto_create!(user_id, repo_id)
perm = new(
perm_user_id: user.user_id,
perm_repo_uid: repo.repo_id,
perm_user_id: user_id,
perm_repo_uid: repo_id,
perm_read: true,
perm_write: true,
perm_admin: true,

View File

@@ -10,7 +10,10 @@
# pipeline_status :string(50) default("unknown"), not null
# login :string(255)
# sync :integer default("0"), not null
# project_id :integer
# identifier :string(11)
# branch :string(255)
# event :string(255)
# sha :string(255)
#
class Ci::Pipeline < Ci::LocalBase
@@ -20,4 +23,6 @@ class Ci::Pipeline < Ci::LocalBase
has_many :pipeline_stages, -> { reorder(show_index: :asc) }, foreign_key: "pipeline_id", :class_name => 'Ci::PipelineStage', dependent: :destroy
attr_accessor :last_build_time
end

View File

@@ -20,37 +20,53 @@ class Ci::Repo < Ci::RemoteBase
return repos
end
def activate!(ci_user_id)
update(repo_active: 1,
repo_signer: generate_code,
repo_secret: generate_code,
repo_user_id: ci_user_id,
repo_timeout: 60,
repo_config: '.trustie-pipeline.yml',
repo_updated: Time.now.to_i)
def self.load_repo_by_repo_slug(repo_slug)
logger.info "########repo_slug: #{repo_slug}"
repo = Ci::Repo.where(repo_slug: repo_slug).first
return repo
end
def find_by_repo_name(repo_name)
logger.info "########repo_name: #{repo_name}"
repos = Ci::Repo.where(repo_name: repo_name)
return repos
end
def self.auto_create!(user, project)
repo = new(
create_params = {
repo_user_id: user.user_id,
repo_namespace: project.owner.login,
repo_name: project.identifier,
repo_slug: "#{project.owner.login}/#{project.identifier}",
repo_clone_url: project.repository.url,
repo_branch: 'master',
repo_config: '.trustie-pipeline.yml'
}
repo = create_repo(create_params)
repo
end
def self.create_repo(create_params)
repo = new(
repo_user_id: create_params[:repo_user_id],
repo_namespace: create_params[:repo_namespace],
repo_name: create_params[:repo_name],
repo_slug: create_params[:repo_slug],
repo_scm: "git",
repo_ssh_url: "",
repo_html_url: "",
repo_clone_url: project.repository.url,
repo_clone_url: create_params[:repo_clone_url],
repo_active: 1,
repo_private: true,
repo_visibility: 'private',
repo_branch: 'master',
repo_branch: create_params[:repo_branch],
repo_counter: 0,
repo_trusted: false,
repo_protected: false,
repo_synced: 0,
repo_version: 1,
repo_timeout: 60,
repo_config: '.trustie-pipeline.yml',
repo_config: create_params[:repo_config],
repo_created: Time.now.to_i,
repo_updated: Time.now.to_i
)
@@ -58,13 +74,34 @@ class Ci::Repo < Ci::RemoteBase
repo.repo_signer = repo.generate_code
repo.repo_secret = repo.generate_code
if repo.save!
Ci::Perm.auto_create!(user, repo)
Ci::Perm.auto_create!(create_params[:repo_user_id], repo.id)
repo.update_column(:repo_uid, repo.id)
repo
end
end
# 取消激活同一个项目多个repo
def deactivate_repos!
repos = find_by_repo_name(self.repo_name)
repos.each do |repo|
repo.update_column(:repo_active, 0)
end
end
def activate!(project)
repos = find_by_repo_name(self.repo_name)
project.update_column(:open_devops, true)
project.increment!(:open_devops_count)
repos.each do |repo|
repo.update_column(:repo_active, 1)
end
end
def deactivate!
update_column(:repo_active, 0)
end
def destroy!
self.destroy
end
end

View File

@@ -10,6 +10,7 @@
# created_at :datetime not null
# updated_at :datetime not null
# parent_category :string(255)
# login :string(255)
#
# Indexes
#
@@ -20,4 +21,7 @@ class Ci::Template < Ci::LocalBase
validates :template_name, presence: {message: "模板名称不能为空"}
validates :stage_type, presence: {message: "阶段类型不能为空"}
validates :category, presence: {message: "模板类型不能为空"}
STAGE_TYPES = {init:'初始化',build:'编译构建',deploy:'部署',customize:'其他'}
end