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
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
push unless options[:skip_push]
push unless options[:use_prebuilt_image]
pull
end

View File

@@ -9,38 +9,51 @@ class Mrsk::Cli::Main < Mrsk::Cli::Base
end
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
runtime = print_runtime do
options_without_prebuilt_image = options.without(:use_prebuilt_image)
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
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
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
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
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
invoke "mrsk:cli:prune:all", [], options.without(:skip_push)
invoke "mrsk:cli:prune:all", [], options_without_prebuilt_image
end
audit_broadcast "Deployed app in #{runtime.to_i} seconds" unless options[:skip_broadcast]
end
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
runtime = print_runtime do
unless options[:use_prebuilt_image]
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
invoke "mrsk:cli:healthcheck:perform"

View File

@@ -1,27 +1,6 @@
require_relative "cli_test_case"
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
run_command("pull").tap do |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
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
end