create_trace_artifact_service.rb 900 字节
Newer Older
1 2 3 4 5 6
module Ci
  class CreateTraceArtifactService < BaseService
    def execute(job)
      return if job.job_artifacts_trace

      job.trace.read do |stream|
S
Shinya Maeda 已提交
7
        break unless stream.file?
8

9 10
        clone_file!(stream.path, JobArtifactUploader.workhorse_upload_path) do |clone_path|
          create_job_trace!(job, clone_path)
S
Shinya Maeda 已提交
11
          FileUtils.rm(stream.path)
S
Shinya Maeda 已提交
12
        end
13 14
      end
    end
15 16 17

    private

S
Shinya Maeda 已提交
18
    def create_job_trace!(job, path)
19 20 21 22 23 24
      File.open(path) do |stream|
        job.create_job_artifacts_trace!(
          project: job.project,
          file_type: :trace,
          file: stream)
      end
S
Shinya Maeda 已提交
25 26
    end

27
    def clone_file!(src_path, temp_dir)
28
      FileUtils.mkdir_p(temp_dir)
29 30 31 32 33
      Dir.mktmpdir('tmp-trace', temp_dir) do |dir_path|
        temp_path = File.join(dir_path, "job.log")
        FileUtils.copy(src_path, temp_path)
        yield(temp_path)
      end
34
    end
35 36
  end
end