Added custom build

This commit is contained in:
Alexey Berezhok
2026-04-19 20:09:14 +03:00
parent 8f1e8d4a0b
commit a33c957a51
3 changed files with 37 additions and 4 deletions

View File

@@ -16,7 +16,9 @@ BUILD_STRUCTURE = {
class MockManager
attr :path, :config, :error, :last_status, :last_pid, :prep_dir, :db, :resultpath, :process_log, :repo_path, :git_path, :build_id, :log, :recips, :spec, :repo_lock, :git_id, :tmp_bld
def initialize(path, config, cfg_counter_path, db, result_path, repo_path, git_path, build_id, recips, spec_file, repo_lock, git_id, tmp_bld)
def initialize(path, config, cfg_counter_path, db, result_path,
repo_path, git_path, build_id, recips, spec_file, repo_lock,
git_id, tmp_bld, build_script)
@error = nil
unless File.exist? (path)
Dir.mkdir(path)
@@ -34,6 +36,7 @@ class MockManager
@repo_lock = repo_lock
@git_id = git_id
@tmp_bld = tmp_bld
@build_script = build_script
File.open(cfg_counter_path, "r+") do |f|
f.flock(File::LOCK_EX)
@@ -178,6 +181,27 @@ class MockManager
end
end
def build_custom()
@log.info("Начало сборки пакетов (сценарий кастомной сборки)")
result_dir = File.join(@prep_dir, BUILD_STRUCTURE[:RESULT])
@log.info("Формируем скрипт кастомной сборки #{@build_script[:script_name]}")
rcp_name = "custom_#{@build_script[:script_name]}"
File.open(File.join(@tmp_src, rcp_name), "w") do |f|
f.write(@build_script[:content].gsub(/\r$/, ""))
end
Dir.chdir(@tmp_src) do
script = File.join(@tmp_src, rcp_name)
cmd_args = %Q(/usr/bin/bash -x "#{script}" "#{result_dir}")
@log.debug(cmd_args)
cmd = Runner.new(cmd_args, @log)
cmd.run_clean
@error = true if cmd.exit_status != 0
@log.error("Ошибка операции") if @error
end
end
def save_logs()
FileUtils.mkdir_p(File.join(@resultpath, "#{@build_id}"))
src_result = File.join(@prep_dir, BUILD_STRUCTURE[:RESULT_SRPM])
@@ -304,8 +328,12 @@ class MockManager
prepare_structure if @error == false
prepare_src if @error == false
prepare_source if @error == false
if @build_script[:script_name].nil?
prepare_src_rpm if @error == false
build_rpm if @error == false
else
build_custom if @error == false
end
save_logs
save_rpms if @error == false
rescue => e

View File

@@ -324,7 +324,10 @@ class ProjectsActions
proj_info = get_project(prj_id)
tmp_bld = false
tmp_bld = true if proj_info[:tmpstpbuild].to_i != 0
mock = MockManager.new(prepare_path, get_project_config(prj_id), counter_file, @db, build_path, repo_path, git_source, build_id, prep_script, spec_file, repo_lock, git_id, tmp_bld)
build_script = get_project_custom_build(prj_id, git_id)
mock = MockManager.new(prepare_path, get_project_config(prj_id), counter_file, @db, build_path, repo_path,
git_source, build_id, prep_script, spec_file, repo_lock,
git_id, tmp_bld, build_script)
bld_id = build_id
@db.update_build_task_error_log(build_id, mock.get_build_process_log)
@db.update_build_task_status(build_id, 3)

View File

@@ -39,6 +39,8 @@
Так же после выполенения скрипта удалите и остановите все запущенные контейнеры, т.к скрипт сам должен контролировать это.
Так же убедитесь, что все log файлы сборки и собранные пакеты положены в каталоги:.
Скрипт выполняется из корня git проекта.
Первый параметр передаваемый в скрипт содержит каталог, куда еобходимо ложить rpm пакеты и log файлы.
У log файлов обязательно должно быть расширение .log, чтоб они попали в отчет сборки.
</label>
<textarea class="form-control" id="codedata" name="codedata" rows="15"><%= @old_content %></textarea>
</div>