From a7f9fad6270c8edbb2a7b7abe66cd28d6977fbb3 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 7 Nov 2023 13:49:15 +0100 Subject: [PATCH] Add support for Dockerfile target build --- .../Livewire/Project/Application/General.php | 2 ++ app/Jobs/ApplicationDeploymentJob.php | 9 ++++-- ..._07_123731_add_target_build_dockerfile.php | 28 +++++++++++++++++++ .../project/application/general.blade.php | 1 + 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 database/migrations/2023_11_07_123731_add_target_build_dockerfile.php diff --git a/app/Http/Livewire/Project/Application/General.php b/app/Http/Livewire/Project/Application/General.php index 703c85b92..bc853108f 100644 --- a/app/Http/Livewire/Project/Application/General.php +++ b/app/Http/Livewire/Project/Application/General.php @@ -55,6 +55,7 @@ class General extends Component 'application.docker_registry_image_tag' => 'nullable', 'application.dockerfile_location' => 'nullable', 'application.custom_labels' => 'nullable', + 'application.dockerfile_target_build' => 'nullable', ]; protected $validationAttributes = [ 'application.name' => 'name', @@ -77,6 +78,7 @@ class General extends Component 'application.docker_registry_image_tag' => 'Docker registry image tag', 'application.dockerfile_location' => 'Dockerfile location', 'application.custom_labels' => 'Custom labels', + 'application.dockerfile_target_build' => 'Dockerfile target build', ]; public function mount() diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index 4ffc1f6b6..d91334745 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -69,6 +69,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted private $docker_compose_base64; private string $dockerfile_location = '/Dockerfile'; private ?string $addHosts = null; + private ?string $buildTarget = null; private $log_model; private Collection $saved_outputs; @@ -178,6 +179,10 @@ public function handle(): void return "--add-host $name:$ip"; })->implode(' '); + if ($this->application->dockerfile_target_build) { + $this->buildTarget = " --target {$this->application->dockerfile_target_build} "; + } + // Get user home directory $this->serverUserHomeDir = instant_remote_process(["echo \$HOME"], $this->server); $this->dockerConfigFileExists = instant_remote_process(["test -f {$this->serverUserHomeDir}/.docker/config.json && echo 'OK' || echo 'NOK'"], $this->server); @@ -921,7 +926,7 @@ private function build_image() if ($this->application->settings->is_static) { $this->execute_remote_command([ - executeInDocker($this->deployment_uuid, "docker build $this->addHosts --network host -f {$this->workdir}/{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->build_image_name {$this->workdir}"), "hidden" => true + executeInDocker($this->deployment_uuid, "docker build $this->buildTarget $this->addHosts --network host -f {$this->workdir}/{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->build_image_name {$this->workdir}"), "hidden" => true ]); $dockerfile = base64_encode("FROM {$this->application->static_image} @@ -959,7 +964,7 @@ private function build_image() ); } else { $this->execute_remote_command([ - executeInDocker($this->deployment_uuid, "docker build $this->addHosts --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->production_image_name {$this->workdir}"), "hidden" => true + executeInDocker($this->deployment_uuid, "docker build $this->buildTarget $this->addHosts --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->production_image_name {$this->workdir}"), "hidden" => true ]); } } diff --git a/database/migrations/2023_11_07_123731_add_target_build_dockerfile.php b/database/migrations/2023_11_07_123731_add_target_build_dockerfile.php new file mode 100644 index 000000000..26f43e925 --- /dev/null +++ b/database/migrations/2023_11_07_123731_add_target_build_dockerfile.php @@ -0,0 +1,28 @@ +string('dockerfile_target_build')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('applications', function (Blueprint $table) { + $table->dropColumn('dockerfile_target_build'); + }); + } +}; diff --git a/resources/views/livewire/project/application/general.blade.php b/resources/views/livewire/project/application/general.blade.php index a5440aa03..475763e41 100644 --- a/resources/views/livewire/project/application/general.blade.php +++ b/resources/views/livewire/project/application/general.blade.php @@ -72,6 +72,7 @@ + @endif @if ($application->could_set_build_commands()) @if ($application->settings->is_static)