2020-03-13 15:44:24 +05:30
# frozen_string_literal: true
class Gitlab :: Seeder :: ContainerImages
attr_reader :tmp_dir , :project , :images_count
DOCKER_FILE_CONTENTS = << ~ EOS
FROM scratch
ARG tag
ENV tag = $tag
EOS
def initialize ( project , images_count )
@project = project
@images_count = images_count
initialize_tmp_dir
end
def seed!
images_count . times do | i |
image_path = " #{ project . container_registry_url } :tag_ #{ i } "
build_image ( image_path )
push_image ( image_path )
puts '.'
end
ensure
FileUtils . remove_entry tmp_dir
end
private
def build_image ( image_path )
system ( * %W[ docker build -t #{ image_path } --build-arg tag=gitlab_container_image_seed . ] , chdir : @tmp_dir )
end
def push_image ( image_path )
system ( * %W[ docker push #{ image_path } ] , chdir : @tmp_dir )
end
def initialize_tmp_dir
@tmp_dir = Dir . mktmpdir ( 'gitlab_seeder_container_images' )
File . write ( File . join ( @tmp_dir , 'Dockerfile' ) , DOCKER_FILE_CONTENTS )
end
end
Gitlab :: Seeder . quiet do
flag = 'SEED_CONTAINER_IMAGES'
if ENV [ flag ]
admin_user = User . admins . first
images_count = Integer ( ENV [ flag ] )
Project . not_mass_generated . visible_to_user ( admin_user ) . sample ( 1 ) . each do | project |
puts " \n Seeding #{ images_count } container images to the ' #{ project . full_path } ' project. "
seeder = Gitlab :: Seeder :: ContainerImages . new ( project , images_count )
seeder . seed!
rescue = > e
puts " \n Seeding container images failed with #{ e . message } . "
2021-06-08 01:23:25 +05:30
puts " Make sure that the registry is running (https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/registry.md) and that Docker CLI (https://www.docker.com/products/docker-desktop) is installed. "
2020-03-13 15:44:24 +05:30
end
else
puts " Skipped. Use the ` #{ flag } ` environment variable to seed container images to the registry. "
end
end