Tag image after booting and include destination
If you are deploying more than one destination to a host, the latest tags will conflict, so we'll append the destination to the tag. The latest tag is used when booting the app or exec-ing a new container. If a deploy doesn't complete on a host for all roles then we should probably not be using it, so move the tagging to the end of the boot process.
This commit is contained in:
@@ -9,9 +9,6 @@ class Kamal::Cli::App < Kamal::Cli::Base
|
|||||||
|
|
||||||
# Assets are prepared in a separate step to ensure they are on all hosts before booting
|
# Assets are prepared in a separate step to ensure they are on all hosts before booting
|
||||||
on(KAMAL.hosts) do
|
on(KAMAL.hosts) do
|
||||||
execute *KAMAL.auditor.record("Tagging #{KAMAL.config.absolute_image} as the latest image"), verbosity: :debug
|
|
||||||
execute *KAMAL.app.tag_current_image_as_latest
|
|
||||||
|
|
||||||
KAMAL.roles_on(host).each do |role|
|
KAMAL.roles_on(host).each do |role|
|
||||||
Kamal::Cli::App::PrepareAssets.new(host, role, self).run
|
Kamal::Cli::App::PrepareAssets.new(host, role, self).run
|
||||||
end
|
end
|
||||||
@@ -21,6 +18,9 @@ class Kamal::Cli::App < Kamal::Cli::Base
|
|||||||
KAMAL.roles_on(host).each do |role|
|
KAMAL.roles_on(host).each do |role|
|
||||||
Kamal::Cli::App::Boot.new(host, role, version, self).run
|
Kamal::Cli::App::Boot.new(host, role, version, self).run
|
||||||
end
|
end
|
||||||
|
|
||||||
|
execute *KAMAL.auditor.record("Tagging #{KAMAL.config.absolute_image} as the latest image"), verbosity: :debug
|
||||||
|
execute *KAMAL.app.tag_latest_image
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ module Kamal::Commands::App::Assets
|
|||||||
combine \
|
combine \
|
||||||
make_directory(role.asset_extracted_path),
|
make_directory(role.asset_extracted_path),
|
||||||
[ *docker(:stop, "-t 1", asset_container, "2> /dev/null"), "|| true" ],
|
[ *docker(:stop, "-t 1", asset_container, "2> /dev/null"), "|| true" ],
|
||||||
docker(:run, "--name", asset_container, "--detach", "--rm", config.latest_image, "sleep 1000000"),
|
docker(:run, "--name", asset_container, "--detach", "--rm", config.absolute_image, "sleep 1000000"),
|
||||||
docker(:cp, "-L", "#{asset_container}:#{role.asset_path}/.", role.asset_extracted_path),
|
docker(:cp, "-L", "#{asset_container}:#{role.asset_path}/.", role.asset_extracted_path),
|
||||||
docker(:stop, "-t 1", asset_container),
|
docker(:stop, "-t 1", asset_container),
|
||||||
by: "&&"
|
by: "&&"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ module Kamal::Commands::App::Images
|
|||||||
docker :image, :prune, "--all", "--force", *filter_args
|
docker :image, :prune, "--all", "--force", *filter_args
|
||||||
end
|
end
|
||||||
|
|
||||||
def tag_current_image_as_latest
|
def tag_latest_image
|
||||||
docker :tag, config.absolute_image, config.latest_image
|
docker :tag, config.absolute_image, config.latest_image
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ class Kamal::Configuration
|
|||||||
end
|
end
|
||||||
|
|
||||||
def latest_image
|
def latest_image
|
||||||
"#{repository}:latest"
|
"#{repository}:#{[ "latest", *destination ].join("-")}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def service_with_version
|
def service_with_version
|
||||||
|
|||||||
@@ -339,12 +339,6 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|||||||
new_command.remove_images.join(" ")
|
new_command.remove_images.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "tag_current_image_as_latest" do
|
|
||||||
assert_equal \
|
|
||||||
"docker tag dhh/app:999 dhh/app:latest",
|
|
||||||
new_command.tag_current_image_as_latest.join(" ")
|
|
||||||
end
|
|
||||||
|
|
||||||
test "make_env_directory" do
|
test "make_env_directory" do
|
||||||
assert_equal "mkdir -p .kamal/env/roles", new_command.make_env_directory.join(" ")
|
assert_equal "mkdir -p .kamal/env/roles", new_command.make_env_directory.join(" ")
|
||||||
end
|
end
|
||||||
@@ -371,7 +365,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|||||||
assert_equal [
|
assert_equal [
|
||||||
:mkdir, "-p", ".kamal/assets/extracted/app-web-999", "&&",
|
:mkdir, "-p", ".kamal/assets/extracted/app-web-999", "&&",
|
||||||
:docker, :stop, "-t 1", "app-web-assets", "2> /dev/null", "|| true", "&&",
|
:docker, :stop, "-t 1", "app-web-assets", "2> /dev/null", "|| true", "&&",
|
||||||
:docker, :run, "--name", "app-web-assets", "--detach", "--rm", "dhh/app:latest", "sleep 1000000", "&&",
|
:docker, :run, "--name", "app-web-assets", "--detach", "--rm", "dhh/app:999", "sleep 1000000", "&&",
|
||||||
:docker, :cp, "-L", "app-web-assets:/public/assets/.", ".kamal/assets/extracted/app-web-999", "&&",
|
:docker, :cp, "-L", "app-web-assets:/public/assets/.", ".kamal/assets/extracted/app-web-999", "&&",
|
||||||
:docker, :stop, "-t 1", "app-web-assets"
|
:docker, :stop, "-t 1", "app-web-assets"
|
||||||
], new_command(asset_path: "/public/assets").extract_assets
|
], new_command(asset_path: "/public/assets").extract_assets
|
||||||
|
|||||||
Reference in New Issue
Block a user