diff --git a/lib/gitlab/ci/trace/stream.rb b/lib/gitlab/ci/trace/stream.rb
index 5d6977106d6ff5553cb9fbfbcd1397854540903f..aaba034474c57b39f322747aeaa7ed208395199e 100644
--- a/lib/gitlab/ci/trace/stream.rb
+++ b/lib/gitlab/ci/trace/stream.rb
@@ -74,6 +74,7 @@ module Gitlab
           match = ""
 
           reverse_line do |line|
+            line.chomp!
             matches = regex.scan(line)
             next unless matches.is_a?(Array)
             next if matches.empty?
diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb
index 13f0338b6aadce7ebcb49a0aee23468507e5825b..3a132fb9989e2ddad4580f87fda5034c19f62113 100644
--- a/spec/lib/gitlab/ci/trace/stream_spec.rb
+++ b/spec/lib/gitlab/ci/trace/stream_spec.rb
@@ -300,5 +300,12 @@ describe Gitlab::Ci::Trace::Stream do
 
       include_examples 'malicious regexp'
     end
+
+    context 'multi-line data with rooted regexp' do
+      let(:data) { "\n65%\n" }
+      let(:regex) { '^(\d+)\%$' }
+
+      it { is_expected.to eq('65') }
+    end
   end
 end