Allow deploy/deliver without building and pushing the image
This commit is contained in:
@@ -1,7 +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"
|
||||||
def deliver
|
def deliver
|
||||||
push
|
push unless options[:skip_push]
|
||||||
pull
|
pull
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -9,27 +9,28 @@ 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"
|
||||||
def deploy
|
def deploy
|
||||||
runtime = print_runtime do
|
runtime = print_runtime do
|
||||||
say "Ensure curl and Docker are installed...", :magenta
|
say "Ensure curl and Docker are installed...", :magenta
|
||||||
invoke "mrsk:cli:server:bootstrap"
|
invoke "mrsk:cli:server:bootstrap", [], options.without(:skip_push)
|
||||||
|
|
||||||
say "Log into image registry...", :magenta
|
say "Log into image registry...", :magenta
|
||||||
invoke "mrsk:cli:registry:login"
|
invoke "mrsk:cli:registry:login", [], options.without(:skip_push)
|
||||||
|
|
||||||
say "Build and push app image...", :magenta
|
say "Build and push app image...", :magenta
|
||||||
invoke "mrsk:cli:build:deliver"
|
invoke "mrsk:cli:build:deliver"
|
||||||
|
|
||||||
say "Ensure Traefik is running...", :magenta
|
say "Ensure Traefik is running...", :magenta
|
||||||
invoke "mrsk:cli:traefik:boot"
|
invoke "mrsk:cli:traefik:boot", [], options.without(:skip_push)
|
||||||
|
|
||||||
say "Ensure app can pass healthcheck...", :magenta
|
say "Ensure app can pass healthcheck...", :magenta
|
||||||
invoke "mrsk:cli:healthcheck:perform"
|
invoke "mrsk:cli:healthcheck:perform", [], options.without(:skip_push)
|
||||||
|
|
||||||
invoke "mrsk:cli:app:boot"
|
invoke "mrsk:cli:app:boot", [], options.without(:skip_push)
|
||||||
|
|
||||||
say "Prune old containers and images...", :magenta
|
say "Prune old containers and images...", :magenta
|
||||||
invoke "mrsk:cli:prune:all"
|
invoke "mrsk:cli:prune:all", [], options.without(:skip_push)
|
||||||
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]
|
||||||
|
|||||||
@@ -1,10 +1,31 @@
|
|||||||
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/, output
|
assert_match /docker image rm --force dhh\/app:999 on 1\.1\.1\.2/, output
|
||||||
assert_match /docker pull dhh\/app:999/, output
|
assert_match /docker pull dhh\/app:999 on 1\.1\.1\.1/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,17 @@ require "mrsk"
|
|||||||
|
|
||||||
ActiveSupport::LogSubscriber.logger = ActiveSupport::Logger.new(STDOUT) if ENV["VERBOSE"]
|
ActiveSupport::LogSubscriber.logger = ActiveSupport::Logger.new(STDOUT) if ENV["VERBOSE"]
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|||||||
Reference in New Issue
Block a user