Keep it simple for the proposal

This commit is contained in:
Samuel Sieg
2023-03-12 10:41:04 +01:00
parent 4bf77ccd1b
commit 9b39f2f3ab
4 changed files with 26 additions and 43 deletions

View File

@@ -1,8 +1,8 @@
class Mrsk::Cli::Build < Mrsk::Cli::Base class Mrsk::Cli::Build < Mrsk::Cli::Base
desc "deliver", "Build app and push app image to registry then pull image on servers" desc "deliver", "Build app and push app image to registry then pull image on servers"
option :skip_push, aliases: "-P", type: :boolean, default: false, desc: "Skip image build and push" option :use_prebuilt_image, aliases: "-P", type: :boolean, default: false, desc: "Use prebuilt image, skip build"
def deliver def deliver
push unless options[:skip_push] push unless options[:use_prebuilt_image]
pull pull
end end

View File

@@ -9,38 +9,51 @@ class Mrsk::Cli::Main < Mrsk::Cli::Base
end end
desc "deploy", "Deploy app to servers" desc "deploy", "Deploy app to servers"
option :skip_push, aliases: "-P", type: :boolean, default: false, desc: "Skip image build and push" option :use_prebuilt_image, aliases: "-P", type: :boolean, default: false, desc: "Use prebuilt image, skip build"
def deploy def deploy
runtime = print_runtime do runtime = print_runtime do
options_without_prebuilt_image = options.without(:use_prebuilt_image)
say "Ensure curl and Docker are installed...", :magenta say "Ensure curl and Docker are installed...", :magenta
invoke "mrsk:cli:server:bootstrap", [], options.without(:skip_push) invoke "mrsk:cli:server:bootstrap", [], options_without_prebuilt_image
say "Log into image registry...", :magenta say "Log into image registry...", :magenta
invoke "mrsk:cli:registry:login", [], options.without(:skip_push) invoke "mrsk:cli:registry:login", [], options_without_prebuilt_image
unless options[:use_prebuilt_image]
say "Build and push app image...", :magenta say "Build and push app image...", :magenta
invoke "mrsk:cli:build:deliver" invoke "mrsk:cli:build:push"
end
say "Pull image onto servers...", :magenta
invoke "mrsk:cli:build:pull", [], options_without_prebuilt_image
say "Ensure Traefik is running...", :magenta say "Ensure Traefik is running...", :magenta
invoke "mrsk:cli:traefik:boot", [], options.without(:skip_push) invoke "mrsk:cli:traefik:boot", [], options_without_prebuilt_image
say "Ensure app can pass healthcheck...", :magenta say "Ensure app can pass healthcheck...", :magenta
invoke "mrsk:cli:healthcheck:perform", [], options.without(:skip_push) invoke "mrsk:cli:healthcheck:perform", [], options_without_prebuilt_image
invoke "mrsk:cli:app:boot", [], options.without(:skip_push) invoke "mrsk:cli:app:boot", [], options_without_prebuilt_image
say "Prune old containers and images...", :magenta say "Prune old containers and images...", :magenta
invoke "mrsk:cli:prune:all", [], options.without(:skip_push) invoke "mrsk:cli:prune:all", [], options_without_prebuilt_image
end end
audit_broadcast "Deployed app in #{runtime.to_i} seconds" unless options[:skip_broadcast] audit_broadcast "Deployed app in #{runtime.to_i} seconds" unless options[:skip_broadcast]
end end
desc "redeploy", "Deploy app to servers without bootstrapping servers, starting Traefik, pruning, and registry login" desc "redeploy", "Deploy app to servers without bootstrapping servers, starting Traefik, pruning, and registry login"
option :use_prebuilt_image, aliases: "-P", type: :boolean, default: false, desc: "Use prebuilt image, skip build"
def redeploy def redeploy
runtime = print_runtime do runtime = print_runtime do
unless options[:use_prebuilt_image]
say "Build and push app image...", :magenta say "Build and push app image...", :magenta
invoke "mrsk:cli:build:deliver" invoke "mrsk:cli:build:push"
end
say "Pull image onto servers...", :magenta
invoke "mrsk:cli:build:pull"
say "Ensure app can pass healthcheck...", :magenta say "Ensure app can pass healthcheck...", :magenta
invoke "mrsk:cli:healthcheck:perform" invoke "mrsk:cli:healthcheck:perform"

View File

@@ -1,27 +1,6 @@
require_relative "cli_test_case" require_relative "cli_test_case"
class CliBuildTest < CliTestCase class CliBuildTest < CliTestCase
test "deliver" do
run_command("deliver").tap do |output|
assert_match /docker buildx build --push --platform linux\/amd64,linux\/arm64 --builder mrsk-app-multiarch -t dhh\/app:999 -t dhh\/app:latest --label service="app" --file Dockerfile \. as .*\@localhost/, output
assert_match /docker image rm --force dhh\/app:999 on 1\.1\.1\.2/, output
assert_match /docker pull dhh\/app:999 on 1\.1\.1\.1/, output
end
end
test "deliver without push" do
run_command("deliver", "--skip-push").tap do |output|
assert_match /docker image rm --force dhh\/app:999 on 1\.1\.1\.2/, output
assert_match /docker pull dhh\/app:999 on 1\.1\.1\.1/, output
end
end
test "push" do
run_command("push").tap do |output|
assert_match /docker buildx build --push --platform linux\/amd64,linux\/arm64 --builder mrsk-app-multiarch -t dhh\/app:999 -t dhh\/app:latest --label service="app" --file Dockerfile \. as .*\@localhost/, output
end
end
test "pull" do test "pull" do
run_command("pull").tap do |output| run_command("pull").tap do |output|
assert_match /docker image rm --force dhh\/app:999 on 1\.1\.1\.2/, output assert_match /docker image rm --force dhh\/app:999 on 1\.1\.1\.2/, output

View File

@@ -12,14 +12,5 @@ ActiveSupport::LogSubscriber.logger = ActiveSupport::Logger.new(STDOUT) if ENV["
# Applies to remote commands only # Applies to remote commands only
SSHKit.config.backend = SSHKit::Backend::Printer SSHKit.config.backend = SSHKit::Backend::Printer
# Ensure local commands use the printer backend too
module SSHKit
module DSL
def run_locally(&block)
SSHKit::Backend::Printer.new(SSHKit::Host.new(:local), &block).run
end
end
end
class ActiveSupport::TestCase class ActiveSupport::TestCase
end end