Do not invoke healthcheck on deploy when no web role

This commit is contained in:
Yoel Cabo
2023-11-14 11:29:07 +01:00
parent 87cb8c1f71
commit 887b7dd46d
5 changed files with 27 additions and 6 deletions

View File

@@ -3,7 +3,7 @@ class Kamal::Cli::Healthcheck < Kamal::Cli::Base
desc "perform", "Health check current app version" desc "perform", "Health check current app version"
def perform def perform
return unless KAMAL.primary_role.running_traefik? raise "The primary host is not configured to run Traefik" unless KAMAL.config.primary_role.running_traefik?
on(KAMAL.primary_host) do on(KAMAL.primary_host) do
begin begin
execute *KAMAL.healthcheck.run execute *KAMAL.healthcheck.run

View File

@@ -38,8 +38,10 @@ class Kamal::Cli::Main < Kamal::Cli::Base
say "Ensure Traefik is running...", :magenta say "Ensure Traefik is running...", :magenta
invoke "kamal:cli:traefik:boot", [], invoke_options invoke "kamal:cli:traefik:boot", [], invoke_options
say "Ensure app can pass healthcheck...", :magenta if KAMAL.config.primary_role.running_traefik?
invoke "kamal:cli:healthcheck:perform", [], invoke_options say "Ensure app can pass healthcheck...", :magenta
invoke "kamal:cli:healthcheck:perform", [], invoke_options
end
say "Detect stale containers...", :magenta say "Detect stale containers...", :magenta
invoke "kamal:cli:app:stale_containers", [], invoke_options.merge(stop: true) invoke "kamal:cli:app:stale_containers", [], invoke_options.merge(stop: true)

View File

@@ -2,7 +2,6 @@ class Kamal::Commands::Healthcheck < Kamal::Commands::Base
def run def run
web = config.role(:web) web = config.role(:web)
return unless web.present?
docker :run, docker :run,
"--detach", "--detach",

View File

@@ -65,9 +65,14 @@ class CliHealthcheckTest < CliTestCase
assert_match "container not ready (unhealthy)", exception.message assert_match "container not ready (unhealthy)", exception.message
end end
test "does not perform if primary does not have traefik" do test "raises an exception if primary does not have traefik" do
SSHKit::Backend::Abstract.any_instance.expects(:execute).never SSHKit::Backend::Abstract.any_instance.expects(:execute).never
run_command("perform", config_file: "test/fixtures/deploy_workers_only.yml")
exception = assert_raises do
run_command("perform", config_file: "test/fixtures/deploy_workers_only.yml")
end
assert_equal "The primary host is not configured to run Traefik", exception.message
end end
private private

View File

@@ -122,6 +122,21 @@ class CliMainTest < CliTestCase
refute_match /Running the post-deploy hook.../, output refute_match /Running the post-deploy hook.../, output
end end
end end
test "deploy without healthcheck if primary host doesn't have traefik" do
invoke_options = { "config_file" => "test/fixtures/deploy_workers_only.yml", "version" => "999", "skip_hooks" => false }
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:healthcheck:perform", [], invoke_options).never
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:registry:login", [], invoke_options)
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:build:deliver", [], invoke_options)
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:traefik:boot", [], invoke_options)
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:app:stale_containers", [], invoke_options.merge(stop: true))
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:app:boot", [], invoke_options)
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:prune:all", [], invoke_options)
run_command("deploy", config_file: "deploy_workers_only")
end
test "deploy with missing secrets" do test "deploy with missing secrets" do
invoke_options = { "config_file" => "test/fixtures/deploy_with_secrets.yml", "version" => "999", "skip_hooks" => false } invoke_options = { "config_file" => "test/fixtures/deploy_with_secrets.yml", "version" => "999", "skip_hooks" => false }