diff --git a/app/assets/javascripts/jobs/bridge/components/sidebar.vue b/app/assets/javascripts/jobs/bridge/components/sidebar.vue
index 9c7ae1178ea44ff363d9a5c33eafd500c178a59b..34cefb0d0e20346512a15064764194b118424511 100644
--- a/app/assets/javascripts/jobs/bridge/components/sidebar.vue
+++ b/app/assets/javascripts/jobs/bridge/components/sidebar.vue
@@ -1,6 +1,7 @@
 <script>
 import { GlButton, GlDropdown, GlDropdownItem } from '@gitlab/ui';
 import { __ } from '~/locale';
+import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
 import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate/tooltip_on_truncate.vue';
 import { JOB_SIDEBAR } from '../../constants';
 import CommitBlock from '../../components/commit_block.vue';
@@ -25,6 +26,7 @@ export default {
     GlDropdownItem,
     TooltipOnTruncate,
   },
+  mixins: [glFeatureFlagsMixin()],
   props: {
     bridgeJob: {
       type: Object,
@@ -54,7 +56,10 @@ export default {
         </h4>
       </tooltip-on-truncate>
       <!-- TODO: implement retry actions -->
-      <div class="gl-flex-grow-1 gl-flex-shrink-0 gl-text-right">
+      <div
+        v-if="glFeatures.triggerJobRetryAction"
+        class="gl-flex-grow-1 gl-flex-shrink-0 gl-text-right"
+      >
         <gl-dropdown
           :text="$options.i18n.retryButton"
           category="primary"
diff --git a/app/controllers/projects/jobs_controller.rb b/app/controllers/projects/jobs_controller.rb
index fa7c62c34dd978d154fa2893b264ce0e461b17a1..bfc2fe6432d4b16254f5380d58d2e15e6251e95f 100644
--- a/app/controllers/projects/jobs_controller.rb
+++ b/app/controllers/projects/jobs_controller.rb
@@ -19,6 +19,7 @@ class Projects::JobsController < Projects::ApplicationController
 
   before_action do
     push_frontend_feature_flag(:infinitely_collapsible_sections, @project, default_enabled: :yaml)
+    push_frontend_feature_flag(:trigger_job_retry_action, @project, default_enabled: :yaml)
   end
 
   layout 'project'
diff --git a/config/feature_flags/development/trigger_job_retry_action.yml b/config/feature_flags/development/trigger_job_retry_action.yml
new file mode 100644
index 0000000000000000000000000000000000000000..79a8593fd05797bc1ed5befe77fc2d8bc1cb9380
--- /dev/null
+++ b/config/feature_flags/development/trigger_job_retry_action.yml
@@ -0,0 +1,8 @@
+---
+name: trigger_job_retry_action
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/77951
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/349966
+milestone: '14.7'
+type: development
+group: group::pipeline authoring
+default_enabled: false
diff --git a/spec/frontend/jobs/bridge/components/sidebar_spec.js b/spec/frontend/jobs/bridge/components/sidebar_spec.js
index 9debbb14c306679e73f5f792a08aa32deff2e69d..03f5a15f288ec8e055f5d8db4188be84216d111f 100644
--- a/spec/frontend/jobs/bridge/components/sidebar_spec.js
+++ b/spec/frontend/jobs/bridge/components/sidebar_spec.js
@@ -7,12 +7,16 @@ import { mockCommit, mockJob } from '../mock_data';
 describe('Bridge Sidebar', () => {
   let wrapper;
 
-  const createComponent = (props) => {
+  const createComponent = ({ featureFlag } = {}) => {
     wrapper = shallowMount(BridgeSidebar, {
+      provide: {
+        glFeatures: {
+          triggerJobRetryAction: featureFlag,
+        },
+      },
       propsData: {
         bridgeJob: mockJob,
         commit: mockCommit,
-        ...props,
       },
     });
   };
@@ -35,10 +39,6 @@ describe('Bridge Sidebar', () => {
       expect(findJobTitle().text()).toBe(mockJob.name);
     });
 
-    it('renders retry dropdown', () => {
-      expect(findRetryDropdown().exists()).toBe(true);
-    });
-
     it('renders commit information', () => {
       expect(findCommitBlock().exists()).toBe(true);
     });
@@ -57,4 +57,24 @@ describe('Bridge Sidebar', () => {
       expect(wrapper.emitted('toggleSidebar')).toHaveLength(1);
     });
   });
+
+  describe('retry action', () => {
+    describe('when feature flag is ON', () => {
+      beforeEach(() => {
+        createComponent({ featureFlag: true });
+      });
+
+      it('renders retry dropdown', () => {
+        expect(findRetryDropdown().exists()).toBe(true);
+      });
+    });
+
+    describe('when feature flag is OFF', () => {
+      it('does not render retry dropdown', () => {
+        createComponent({ featureFlag: false });
+
+        expect(findRetryDropdown().exists()).toBe(false);
+      });
+    });
+  });
 });