59 lines
1.8 KiB
Ruby
59 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Ci
|
|
module Pipeline
|
|
module Seed
|
|
class Deployment < Seed::Base
|
|
attr_reader :job, :environment
|
|
|
|
def initialize(job, environment)
|
|
@job = job
|
|
@environment = environment
|
|
end
|
|
|
|
def to_resource
|
|
return job.deployment if job.deployment
|
|
return unless job.starts_environment?
|
|
|
|
deployment = ::Deployment.new(attributes)
|
|
|
|
# If there is a validation error on environment creation, such as
|
|
# the name contains invalid character, the job will fall back to a
|
|
# non-environment job.
|
|
return unless deployment.valid? && deployment.environment.persisted?
|
|
|
|
if cluster = deployment.environment.deployment_platform&.cluster
|
|
# double write cluster_id until 12.9: https://gitlab.com/gitlab-org/gitlab/issues/202628
|
|
deployment.cluster_id = cluster.id
|
|
deployment.deployment_cluster = ::DeploymentCluster.new(
|
|
cluster_id: cluster.id,
|
|
kubernetes_namespace: cluster.kubernetes_namespace_for(deployment.environment, deployable: job)
|
|
)
|
|
end
|
|
|
|
# Allocate IID for deployments.
|
|
# This operation must be outside of transactions of pipeline creations.
|
|
deployment.ensure_project_iid!
|
|
|
|
deployment
|
|
end
|
|
|
|
private
|
|
|
|
def attributes
|
|
{
|
|
project: job.project,
|
|
environment: environment,
|
|
user: job.user,
|
|
ref: job.ref,
|
|
tag: job.tag,
|
|
sha: job.sha,
|
|
on_stop: job.on_stop
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|