Added basic support for post-deployment commands.

This commit is contained in:
Stuart Rowlands
2024-02-08 19:27:43 +10:00
parent 642a6e3203
commit 77a0179822
4 changed files with 65 additions and 0 deletions

View File

@@ -257,6 +257,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->preview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::FINISHED);
}
}
$this->run_post_deployment_command();
$this->application->isConfigurationChanged(true);
} catch (Exception $e) {
if ($this->pull_request_id !== 0 && $this->application->is_github_based()) {
@@ -1515,6 +1516,30 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
]);
}
private function run_post_deployment_command()
{
if (empty($this->application->post_deployment_command)) {
return;
}
$this->application_deployment_queue->addLogEntry("Executing post deployment command: {$this->application->post_deployment_command}");
$containers = getCurrentApplicationContainerStatus($this->server, $this->application->id, $this->pull_request_id);
foreach ($containers as $container) {
$containerName = data_get($container, 'Names');
if ($containers->count() == 1 || str_starts_with($containerName, $this->application->post_deployment_command_container. '-' . $this->application->uuid)) {
$cmd = 'sh -c "' . str_replace('"', '\"', $this->application->post_deployment_command) . '"';
$exec = "docker exec {$containerName} {$cmd}";
$this->execute_remote_command(
[
executeInDocker($this->deployment_uuid, $exec), 'hidden' => true
],
);
return;
}
}
throw new RuntimeException('Post deployment command: Could not find a valid container. Is the container name correct?');
}
private function next(string $status)
{
queue_next_deployment($this->application);