debian-mirror-gitlab/app/services/deployments/create_for_build_service.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

36 lines
1.3 KiB
Ruby
Raw Normal View History

2022-03-02 08:16:31 +05:30
# frozen_string_literal: true
module Deployments
# This class creates a deployment record for a build (a pipeline job).
class CreateForBuildService
DeploymentCreationError = Class.new(StandardError)
def execute(build)
return unless build.instance_of?(::Ci::Build) && build.persisted_environment.present?
# TODO: Move all buisness logic in `Seed::Deployment` to this class after
# `create_deployment_in_separate_transaction` feature flag has been removed.
# See https://gitlab.com/gitlab-org/gitlab/-/issues/348778
2022-08-13 15:12:31 +05:30
# If build.persisted_environment is a BatchLoader, we need to remove
# the method proxy in order to clone into new item here
# https://github.com/exAspArk/batch-loader/issues/31
environment = if build.persisted_environment.respond_to?(:__sync)
build.persisted_environment.__sync
else
build.persisted_environment
end
2022-03-02 08:16:31 +05:30
deployment = ::Gitlab::Ci::Pipeline::Seed::Deployment
2022-08-13 15:12:31 +05:30
.new(build, environment).to_resource
2022-03-02 08:16:31 +05:30
return unless deployment
build.create_deployment!(deployment.attributes)
rescue ActiveRecord::RecordInvalid => e
Gitlab::ErrorTracking.track_and_raise_for_dev_exception(
DeploymentCreationError.new(e.message), build_id: build.id)
end
end
end