mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-20 03:35:57 +08:00
创建多条流水线、模板管理
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user