Spike of runtime setup
This commit is contained in:
@@ -5,4 +5,5 @@ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
|
|||||||
require "pipeline"
|
require "pipeline"
|
||||||
Pipeline.load_config(File.expand_path('../../config/pipeline.yml', __FILE__))
|
Pipeline.load_config(File.expand_path('../../config/pipeline.yml', __FILE__))
|
||||||
# Pipeline.build_analyzer(ARGV[0])
|
# Pipeline.build_analyzer(ARGV[0])
|
||||||
Pipeline.scratch
|
# Pipeline.scratch
|
||||||
|
Pipeline.analyzer
|
||||||
|
|||||||
@@ -31,6 +31,21 @@ module Pipeline
|
|||||||
puts latest_tag
|
puts latest_tag
|
||||||
AnalyzerBuild.(latest_tag, track_slug)
|
AnalyzerBuild.(latest_tag, track_slug)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.release
|
||||||
|
FileUtils.rm_rf "/tmp/analyzer-env/"
|
||||||
|
env_base = "/tmp/analyzer-env/#{SecureRandom.hex}"
|
||||||
|
environment = Runtime::RuntimeEnvironment.new(env_base)
|
||||||
|
environment.prepare
|
||||||
|
img = Pipeline::Util::ImgWrapper.new
|
||||||
|
environment.release_analyzer("ruby")
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.analyzer
|
||||||
|
env_base = "/tmp/analyzer-env/1e9c733fd7502974c2a3fdd85da9c844"
|
||||||
|
environment = Runtime::RuntimeEnvironment.new(env_base)
|
||||||
|
environment.create_analyzer_workdir("ruby")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
require "pipeline/analyzer_repo"
|
require "pipeline/analyzer_repo"
|
||||||
@@ -46,3 +61,4 @@ require "pipeline/util/runc_wrapper"
|
|||||||
require "pipeline/build/build_image"
|
require "pipeline/build/build_image"
|
||||||
require "pipeline/build/publish_image"
|
require "pipeline/build/publish_image"
|
||||||
require "pipeline/build/analyzer_build"
|
require "pipeline/build/analyzer_build"
|
||||||
|
require "pipeline/runtime/runtime_environment"
|
||||||
|
|||||||
63
lib/pipeline/runtime/runtime_environment.rb
Normal file
63
lib/pipeline/runtime/runtime_environment.rb
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
module Pipeline::Runtime
|
||||||
|
class RuntimeEnvironment
|
||||||
|
|
||||||
|
attr_reader :env_base
|
||||||
|
|
||||||
|
def initialize(env_base)
|
||||||
|
@env_base = env_base
|
||||||
|
end
|
||||||
|
|
||||||
|
def prepare
|
||||||
|
FileUtils.mkdir_p env_base
|
||||||
|
end
|
||||||
|
|
||||||
|
def release_analyzer(track_slug)
|
||||||
|
registry_endpoint = Pipeline.config["registry_endpoint"]
|
||||||
|
|
||||||
|
track_dir = "#{env_base}/#{track_slug}"
|
||||||
|
release_dir = "#{track_dir}/releases/#{Time.now.to_i}_release"
|
||||||
|
current_dir = "#{track_dir}/current"
|
||||||
|
FileUtils.mkdir_p release_dir
|
||||||
|
|
||||||
|
img = Pipeline::Util::ImgWrapper.new
|
||||||
|
runc = Pipeline::Util::RuncWrapper.new
|
||||||
|
|
||||||
|
configurator = Pipeline::Util::RuncConfigurator.new
|
||||||
|
configurator.seed_from_env
|
||||||
|
|
||||||
|
container_driver = Pipeline::Util::ContainerDriver.new(runc, img, configurator, release_dir)
|
||||||
|
|
||||||
|
# container_driver.prepare_workdir
|
||||||
|
# container_driver.unpack_image("track_slug:master")
|
||||||
|
ecr = Aws::ECR::Client.new(region: 'eu-west-1')
|
||||||
|
authorization_token = ecr.get_authorization_token.authorization_data[0].authorization_token
|
||||||
|
plain = Base64.decode64(authorization_token)
|
||||||
|
user,password = plain.split(":")
|
||||||
|
img.login("AWS", password, registry_endpoint)
|
||||||
|
|
||||||
|
remote_tag = "#{registry_endpoint}/#{track_slug}-analyzer-dev:latest"
|
||||||
|
puts remote_tag
|
||||||
|
|
||||||
|
img.pull(remote_tag)
|
||||||
|
|
||||||
|
puts "pulled"
|
||||||
|
|
||||||
|
container_driver.unpack_image(remote_tag)
|
||||||
|
|
||||||
|
puts "unpacked"
|
||||||
|
|
||||||
|
system("chmod -R a-w #{release_dir}")
|
||||||
|
system("chmod -R go-rwx #{release_dir}")
|
||||||
|
|
||||||
|
FileUtils.symlink(release_dir, current_dir, force: true)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_analyzer_workdir(track_slug)
|
||||||
|
track_dir = "#{env_base}/#{track_slug}"
|
||||||
|
current_dir = "#{track_dir}/current"
|
||||||
|
iterations = "#{track_dir}/iterations"
|
||||||
|
FileUtils.mkdir_p iterations
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -34,6 +34,14 @@ module Pipeline::Util
|
|||||||
exec_cmd "#{push_cmd} #{remote_tag}"
|
exec_cmd "#{push_cmd} #{remote_tag}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def pull(remote_tag)
|
||||||
|
exec_cmd "#{pull_cmd} #{remote_tag}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def pull_cmd
|
||||||
|
"#{binary_path} pull -state #{state_location}"
|
||||||
|
end
|
||||||
|
|
||||||
def push_cmd
|
def push_cmd
|
||||||
"#{binary_path} push -state #{state_location}"
|
"#{binary_path} push -state #{state_location}"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
require 'test_helper'
|
|
||||||
require 'json'
|
|
||||||
|
|
||||||
module Pipeline::Runtime
|
|
||||||
class ReleaseAnalyzerTest < Minitest::Test
|
|
||||||
|
|
||||||
def setup
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_call_invokes_each_phase
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
34
test/pipeline/runtime/runtime_environment_test.rb
Normal file
34
test/pipeline/runtime/runtime_environment_test.rb
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
require 'json'
|
||||||
|
|
||||||
|
module Pipeline::Runtime
|
||||||
|
class ReleaseAnalyzerTest < Minitest::Test
|
||||||
|
|
||||||
|
attr_reader :env_base, :environment
|
||||||
|
|
||||||
|
def setup
|
||||||
|
FileUtils.rm_rf "/tmp/analyzer-env/"
|
||||||
|
@env_base = "/tmp/analyzer-env/#{SecureRandom.hex}"
|
||||||
|
@environment = RuntimeEnvironment.new(@env_base)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_prepare_creates_env_if_missing
|
||||||
|
refute File.directory?(env_base)
|
||||||
|
environment.prepare
|
||||||
|
assert File.directory?(env_base)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_release_latest_analyzer
|
||||||
|
demo_analyzer_repo = "https://github.com/exercism/stub-analyzer.git"
|
||||||
|
repo = Pipeline::AnalyzerRepo.new(demo_analyzer_repo)
|
||||||
|
img = Pipeline::Util::ImgWrapper.new
|
||||||
|
|
||||||
|
environment.release_analyzer("demo")
|
||||||
|
assert File.directory?("#{env_base}/demo")
|
||||||
|
assert File.directory?("#{env_base}/demo/releases")
|
||||||
|
releases = Dir["#{env_base}/demo/releases"]
|
||||||
|
assert_equal 1, releases.size
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user