diff --git a/app/helpers/environment_helper.rb b/app/helpers/environment_helper.rb
index 27975b7ddb73b3bb89ea17abd641222a3dd9a7a7..ff8550439d0e4bd14882f678067e8e715eab8310 100644
--- a/app/helpers/environment_helper.rb
+++ b/app/helpers/environment_helper.rb
@@ -14,10 +14,12 @@ module EnvironmentHelper
     end
   end
 
-  def deployment_link(deployment)
+  def deployment_link(deployment, text: nil)
     return unless deployment
 
-    link_to "##{deployment.iid}", [deployment.project.namespace.becomes(Namespace), deployment.project, deployment.deployable]
+    link_label = text ? text : "##{deployment.iid}"
+
+    link_to link_label, [deployment.project.namespace.becomes(Namespace), deployment.project, deployment.deployable]
   end
 
   def last_deployment_link_for_environment_build(project, build)
diff --git a/app/views/projects/builds/show.html.haml b/app/views/projects/builds/show.html.haml
index 108674dbba66bb872dca41fbc8c9164086b2e828..cdeb81372ee1b1684fc3767f9ab51c0877638810 100644
--- a/app/views/projects/builds/show.html.haml
+++ b/app/views/projects/builds/show.html.haml
@@ -46,8 +46,7 @@
           - else
             This build is creating a deployment to #{environment_link_for_build(@build.project, @build)}
             - if environment.try(:last_deployment)
-              and will overwrite the
-              = link_to 'latest deployment', deployment_link(environment.last_deployment)
+              and will overwrite the #{deployment_link(environment.last_deployment, text: 'latest deployment')}
 
     .prepend-top-default
       - if @build.erased?
diff --git a/changelogs/unreleased/25136-last-deployment-link.yml b/changelogs/unreleased/25136-last-deployment-link.yml
new file mode 100644
index 0000000000000000000000000000000000000000..eab1534aa6688a8df38ed43da1630a3a47ae3748
--- /dev/null
+++ b/changelogs/unreleased/25136-last-deployment-link.yml
@@ -0,0 +1,4 @@
+---
+title: Fix Latest deployment link is broken
+merge_request: 7839
+author:
diff --git a/spec/features/projects/builds_spec.rb b/spec/features/projects/builds_spec.rb
index a0ccc472d11f40c57ca41713777369ac3095110c..8c4d4320dc5c83e9027bd7d7878457b0c5dd22f0 100644
--- a/spec/features/projects/builds_spec.rb
+++ b/spec/features/projects/builds_spec.rb
@@ -227,6 +227,43 @@ feature 'Builds', :feature do
         expect(page).to have_selector('.js-build-value', text: 'TRIGGER_VALUE_1')
       end
     end
+
+    context 'when build starts environment' do
+      let(:environment) { create(:environment, project: project) }
+      let(:pipeline) { create(:ci_pipeline, project: project) }
+
+      context 'build is successfull and has deployment' do
+        let(:deployment) { create(:deployment) }
+        let(:build) { create(:ci_build, :success, environment: environment.name, deployments: [deployment], pipeline: pipeline) }
+
+        it 'shows a link for the build' do
+          visit namespace_project_build_path(project.namespace, project, build)
+
+          expect(page).to have_link environment.name
+        end
+      end
+
+      context 'build is complete and not successfull' do
+        let(:build) { create(:ci_build, :failed, environment: environment.name, pipeline: pipeline) }
+
+        it 'shows a link for the build' do
+          visit namespace_project_build_path(project.namespace, project, build)
+
+          expect(page).to have_link environment.name
+        end
+      end
+
+      context 'build creates a new deployment' do
+        let!(:deployment) { create(:deployment, environment: environment, sha: project.commit.id) }
+        let(:build) { create(:ci_build, :success, environment: environment.name, pipeline: pipeline) }
+
+        it 'shows a link to lastest deployment' do
+          visit namespace_project_build_path(project.namespace, project, build)
+
+          expect(page).to have_link('latest deployment')
+        end
+      end
+    end
   end
 
   describe "POST /:project/builds/:id/cancel" do