diff --git a/Tools/BuildSlaveSupport/ews-build/steps.py b/Tools/BuildSlaveSupport/ews-build/steps.py
index b431b45..f688495 100644
--- a/Tools/BuildSlaveSupport/ews-build/steps.py
+++ b/Tools/BuildSlaveSupport/ews-build/steps.py
@@ -325,6 +325,7 @@
     addURLs = False
     bug_open_statuses = ['UNCONFIRMED', 'NEW', 'ASSIGNED', 'REOPENED']
     bug_closed_statuses = ['RESOLVED', 'VERIFIED', 'CLOSED']
+    rollout_preamble = 'ROLLOUT of r'
 
     @defer.inlineCallbacks
     def _addToLog(self, logName, message):
@@ -388,6 +389,9 @@
 
         patch_author = patch_json.get('creator')
         self.setProperty('patch_author', patch_author)
+        patch_title = patch_json.get('summary')
+        if patch_title.startswith(self.rollout_preamble):
+            self.setProperty('rollout', True)
         if self.addURLs:
             self.addURL('Patch by: {}'.format(patch_author), '')
         return patch_json.get('is_obsolete')
@@ -1201,6 +1205,9 @@
         self.skipUpload = skipUpload
         super(CompileWebKit, self).__init__(logEnviron=False, **kwargs)
 
+    def doStepIf(self, step):
+        return not (self.getProperty('rollout') and self.getProperty('buildername', '').lower() == 'commit-queue')
+
     def start(self):
         platform = self.getProperty('platform')
         buildOnly = self.getProperty('buildOnly')
@@ -1585,6 +1592,7 @@
 
     def __init__(self, **kwargs):
         shell.Test.__init__(self, logEnviron=False, **kwargs)
+        self.incorrectLayoutLines = []
 
     def start(self):
         self.log_observer = logobserver.BufferLogObserver(wantStderr=True)
@@ -1592,7 +1600,6 @@
         self.log_observer_json = logobserver.BufferLogObserver()
         self.addLogObserver('json', self.log_observer_json)
 
-        self.incorrectLayoutLines = []
         platform = self.getProperty('platform')
         appendCustomBuildFlags(self, platform, self.getProperty('fullPlatform'))
         additionalArguments = self.getProperty('additionalArguments')
@@ -1892,6 +1899,9 @@
         self.setProperty('use-dump-render-tree', True)
         return RunWebKitTests.start(self)
 
+    def doStepIf(self, step):
+        return not (self.getProperty('rollout') and self.getProperty('buildername', '').lower() == 'commit-queue')
+
 
 class ArchiveBuiltProduct(shell.ShellCommand):
     command = ['python', 'Tools/BuildSlaveSupport/built-product-archive',
diff --git a/Tools/BuildSlaveSupport/ews-build/steps_unittest.py b/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
index 5387340..e4681bf 100644
--- a/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
+++ b/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
@@ -984,6 +984,14 @@
         self.expectOutcome(result=FAILURE, state_string='Failed to compile WebKit')
         return self.runStep()
 
+    def test_skip_for_rollout_patches_on_commit_queue(self):
+        self.setupStep(CompileWebKit())
+        self.setProperty('buildername', 'Commit-Queue')
+        self.setProperty('configuration', 'debug')
+        self.setProperty('rollout', True)
+        self.expectOutcome(result=SKIPPED, state_string='Compiled WebKit (skipped)')
+        return self.runStep()
+
 
 class TestCompileWebKitToT(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
@@ -1739,6 +1747,15 @@
         self.expectOutcome(result=FAILURE, state_string='layout-tests (failure)')
         return self.runStep()
 
+    def test_skip_for_rollout_patches_on_commit_queue(self):
+        self.setupStep(RunWebKit1Tests())
+        self.setProperty('buildername', 'Commit-Queue')
+        self.setProperty('fullPlatform', 'mac')
+        self.setProperty('configuration', 'debug')
+        self.setProperty('rollout', True)
+        self.expectOutcome(result=SKIPPED, state_string='layout-tests (skipped)')
+        return self.runStep()
+
 
 class TestAnalyzeLayoutTestsResults(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 9aea2f4..f12aa6b 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,18 @@
+2020-02-28  Aakash Jain  <aakash_jain@apple.com>
+
+        [ews] commit queue should skip building and testing for rollout patches
+        https://bugs.webkit.org/show_bug.cgi?id=208329
+
+        Reviewed by Jonathan Bedard.
+
+        * BuildSlaveSupport/ews-build/steps.py:
+        (BugzillaMixin._is_patch_obsolete): Set rollout property appropriately.
+        (CompileWebKit.doStepIf): Skip tests for rollout patches on commit-queue.
+        (RunWebKit1Tests.doStepIf): Ditto.
+        * BuildSlaveSupport/ews-build/steps_unittest.py:
+        (TestCompileWebKit.test_skip_for_rollout_patches_on_commit_queue): Added unit-test.
+        (TestRunWebKit1Tests.test_skip_for_rollout_patches_on_commit_queue): Ditto.
+
 2020-02-28  Daniel Bates  <dabates@apple.com>
 
         Update my watch list preferences and contributor's entry.
