diff --git a/app/presenters/project_presenter.rb b/app/presenters/project_presenter.rb
index 484ac64580d889ad85c504654200062623f0c828..63ead5538cbe33bcd72cece8b75d8ae93bf2f20d 100644
--- a/app/presenters/project_presenter.rb
+++ b/app/presenters/project_presenter.rb
@@ -260,7 +260,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
     if current_user && can?(current_user, :admin_pipeline, project) && repository.gitlab_ci_yml.blank? && !show_auto_devops_callout
       OpenStruct.new(enabled: auto_devops_enabled?,
                      label: auto_devops_enabled? ? _('Auto DevOps enabled') : _('Enable Auto DevOps'),
-                     link: project_settings_ci_cd_path(project, anchor: 'js-general-pipeline-settings'))
+                     link: project_settings_ci_cd_path(project, anchor: 'autodevops-settings'))
     elsif auto_devops_enabled?
       OpenStruct.new(enabled: true,
                      label: _('Auto DevOps enabled'),
diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml
index b15fe514a0812e7bf006667440c8e63580dd4818..2f69da593cddc3813ebd073780db1b9966b260bc 100644
--- a/app/views/projects/empty.html.haml
+++ b/app/views/projects/empty.html.haml
@@ -22,7 +22,7 @@
 
       %hr
       %p
-        - link_to_auto_devops_settings = link_to(s_('AutoDevOps|enable Auto DevOps (Beta)'), project_settings_ci_cd_path(@project, anchor: 'js-general-pipeline-settings'))
+        - link_to_auto_devops_settings = link_to(s_('AutoDevOps|enable Auto DevOps (Beta)'), project_settings_ci_cd_path(@project, anchor: 'autodevops-settings'))
         - link_to_add_kubernetes_cluster = link_to(s_('AutoDevOps|add a Kubernetes cluster'), new_project_cluster_path(@project))
         = s_('AutoDevOps|You can automatically build and test your application if you %{link_to_auto_devops_settings} for this project. You can automatically deploy it as well, if you %{link_to_add_kubernetes_cluster}.').html_safe % { link_to_auto_devops_settings: link_to_auto_devops_settings, link_to_add_kubernetes_cluster: link_to_add_kubernetes_cluster }
 
diff --git a/app/views/projects/settings/ci_cd/_autodevops_form.html.haml b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..7b410101c058202650f94cecf1b04d67ec6d1fca
--- /dev/null
+++ b/app/views/projects/settings/ci_cd/_autodevops_form.html.haml
@@ -0,0 +1,40 @@
+.row.prepend-top-default
+  .col-lg-12
+    = form_for @project, url: project_settings_ci_cd_path(@project) do |f|
+      = form_errors(@project)
+      %fieldset.builds-feature
+        .form-group
+          - message = auto_devops_warning_message(@project)
+          - ci_file_formatted = '<code>.gitlab-ci.yml</code>'.html_safe
+          - if message
+            %p.settings-message.text-center
+              = message.html_safe
+          = f.fields_for :auto_devops_attributes, @auto_devops do |form|
+            .radio
+              = form.label :enabled_true do
+                = form.radio_button :enabled, 'true'
+                %strong= s_('CICD|Enable Auto DevOps')
+                %br
+                = s_('CICD|The Auto DevOps pipeline configuration will be used when there is no %{ci_file} in the project.').html_safe % { ci_file: ci_file_formatted }
+
+            .radio
+              = form.label :enabled_false do
+                = form.radio_button :enabled, 'false'
+                %strong= s_('CICD|Disable Auto DevOps')
+                %br
+                = s_('CICD|An explicit %{ci_file} needs to be specified before you can begin using Continuous Integration and Delivery.').html_safe % { ci_file: ci_file_formatted }
+
+            .radio
+              = form.label :enabled_ do
+                = form.radio_button :enabled, ''
+                %strong= s_('CICD|Instance default (%{state})') % { state: "#{Gitlab::CurrentSettings.auto_devops_enabled? ? _('enabled') : _('disabled')}" }
+                %br
+                = s_('CICD|Follow the instance default to either have Auto DevOps enabled or disabled when there is no project specific %{ci_file}.').html_safe % { ci_file: ci_file_formatted }
+
+            = form.label :domain, class:"prepend-top-10" do
+              = _('Domain')
+            = form.text_field :domain, class: 'form-control', placeholder: 'domain.com'
+            .help-block
+              = s_('CICD|You need to specify a domain if you want to use Auto Review Apps and Auto Deploy stages.')
+
+          = f.submit 'Save changes', class: "btn btn-success prepend-top-15"
diff --git a/app/views/projects/settings/ci_cd/_form.html.haml b/app/views/projects/settings/ci_cd/_form.html.haml
index 20868f9ba5d6d5df05bba0c7af028e7d8e2cbb38..80c226ad27332a00c475e2947c2983ade1e23b61 100644
--- a/app/views/projects/settings/ci_cd/_form.html.haml
+++ b/app/views/projects/settings/ci_cd/_form.html.haml
@@ -3,44 +3,6 @@
     = form_for @project, url: project_settings_ci_cd_path(@project) do |f|
       = form_errors(@project)
       %fieldset.builds-feature
-        .form-group
-          %h5 Auto DevOps (Beta)
-          %p
-            Auto DevOps will automatically build, test, and deploy your application based on a predefined Continuous Integration and Delivery configuration.
-            = link_to 'Learn more about Auto DevOps', help_page_path('topics/autodevops/index.md')
-            - message = auto_devops_warning_message(@project)
-            - if message
-              %p.settings-message.text-center
-                = message.html_safe
-          = f.fields_for :auto_devops_attributes, @auto_devops do |form|
-            .radio
-              = form.label :enabled_true do
-                = form.radio_button :enabled, 'true'
-                %strong Enable Auto DevOps
-                %br
-                %span.descr
-                  The Auto DevOps pipeline configuration will be used when there is no <code>.gitlab-ci.yml</code> in the project.
-
-            .radio
-              = form.label :enabled_false do
-                = form.radio_button :enabled, 'false'
-                %strong Disable Auto DevOps
-                %br
-                %span.descr
-                  An explicit <code>.gitlab-ci.yml</code> needs to be specified before you can begin using Continuous Integration and Delivery.
-
-            .radio
-              = form.label :enabled_ do
-                = form.radio_button :enabled, ''
-                %strong Instance default (#{Gitlab::CurrentSettings.auto_devops_enabled? ? 'enabled' : 'disabled'})
-                %br
-                %span.descr
-                  Follow the instance default to either have Auto DevOps enabled or disabled when there is no project specific <code>.gitlab-ci.yml</code>.
-            %p
-              You need to specify a domain if you want to use Auto Review Apps and Auto Deploy stages.
-            = form.text_field :domain, class: 'form-control', placeholder: 'domain.com'
-
-        %hr
         .form-group.append-bottom-default.js-secret-runner-token
           = f.label :runners_token, "Runner token", class: 'label-light'
           .form-control.js-secret-value-placeholder
diff --git a/app/views/projects/settings/ci_cd/show.html.haml b/app/views/projects/settings/ci_cd/show.html.haml
index 09268c9943b578aff87208a5a6031c4e09b3475e..5f596a019f732134819282fa3cd65ecf240ff3e4 100644
--- a/app/views/projects/settings/ci_cd/show.html.haml
+++ b/app/views/projects/settings/ci_cd/show.html.haml
@@ -12,10 +12,22 @@
     %button.btn.js-settings-toggle{ type: 'button' }
       = expanded ? 'Collapse' : 'Expand'
     %p
-      Update your CI/CD configuration, like job timeout or Auto DevOps.
+      Access your runner token, customize your pipeline configuration, and view your pipeline status and coverage report.
   .settings-content
     = render 'form'
 
+%section.settings#autodevops-settings.no-animate{ class: ('expanded' if expanded) }
+  .settings-header
+    %h4
+      = s_('CICD|Auto DevOps (Beta)')
+    %button.btn.btn-default.js-settings-toggle{ type: 'button' }
+      = expanded ? _('Collapse') : _('Expand')
+    %p
+      = s_('CICD|Auto DevOps will automatically build, test, and deploy your application based on a predefined Continuous Integration and Delivery configuration.')
+      = link_to s_('CICD|Learn more about Auto DevOps'), help_page_path('topics/autodevops/index.md')
+  .settings-content
+    = render 'autodevops_form'
+
 %section.settings.no-animate{ class: ('expanded' if expanded) }
   .settings-header
     %h4
diff --git a/app/views/shared/_auto_devops_callout.html.haml b/app/views/shared/_auto_devops_callout.html.haml
index e9ac192f5f73e30ebf8e4bd2aa8a749cf231e740..d3fa324e460b206aa406931fabfbd7944ac20508 100644
--- a/app/views/shared/_auto_devops_callout.html.haml
+++ b/app/views/shared/_auto_devops_callout.html.haml
@@ -9,7 +9,7 @@
       - link = link_to(s_('AutoDevOps|Auto DevOps documentation'), help_page_path('topics/autodevops/index.md'), target: '_blank', rel: 'noopener noreferrer')
       = s_('AutoDevOps|Learn more in the %{link_to_documentation}').html_safe % { link_to_documentation: link }
     .banner-buttons
-      = link_to s_('AutoDevOps|Enable in settings'), project_settings_ci_cd_path(@project, anchor: 'js-general-pipeline-settings'), class: 'btn js-close-callout'
+      = link_to s_('AutoDevOps|Enable in settings'), project_settings_ci_cd_path(@project, anchor: 'autodevops-settings'), class: 'btn js-close-callout'
 
   %button.btn-transparent.banner-close.close.js-close-callout{ type: 'button',
   'aria-label' => 'Dismiss Auto DevOps box' }
diff --git a/changelogs/unreleased/43466-make-auto-devops-settings-first-class.yml b/changelogs/unreleased/43466-make-auto-devops-settings-first-class.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f5c5415159cc278055eef4b5141c6aa83d38056d
--- /dev/null
+++ b/changelogs/unreleased/43466-make-auto-devops-settings-first-class.yml
@@ -0,0 +1,5 @@
+---
+title: Create settings section for autodevops
+merge_request: 18321
+author:
+type: changed
diff --git a/spec/features/projects/settings/pipelines_settings_spec.rb b/spec/features/projects/settings/pipelines_settings_spec.rb
index d9020333f289d23918eb85cf225886c59d7a84f1..e875a88a52b941513b23a3c20db0f410a657c500 100644
--- a/spec/features/projects/settings/pipelines_settings_spec.rb
+++ b/spec/features/projects/settings/pipelines_settings_spec.rb
@@ -8,6 +8,7 @@ describe "Projects > Settings > Pipelines settings" do
   before do
     sign_in(user)
     project.add_role(user, role)
+    create(:project_auto_devops, project: project)
   end
 
   context 'for developer' do
@@ -27,10 +28,17 @@ describe "Projects > Settings > Pipelines settings" do
       visit project_settings_ci_cd_path(project)
 
       fill_in('Test coverage parsing', with: 'coverage_regex')
-      click_on 'Save changes'
+
+      page.within '#js-general-pipeline-settings' do
+        click_on 'Save changes'
+      end
 
       expect(page.status_code).to eq(200)
-      expect(page).to have_button('Save changes', disabled: false)
+
+      page.within '#js-general-pipeline-settings' do
+        expect(page).to have_button('Save changes', disabled: false)
+      end
+
       expect(page).to have_field('Test coverage parsing', with: 'coverage_regex')
     end
 
@@ -38,10 +46,15 @@ describe "Projects > Settings > Pipelines settings" do
       visit project_settings_ci_cd_path(project)
 
       page.check('Auto-cancel redundant, pending pipelines')
-      click_on 'Save changes'
+      page.within '#js-general-pipeline-settings' do
+        click_on 'Save changes'
+      end
 
       expect(page.status_code).to eq(200)
-      expect(page).to have_button('Save changes', disabled: false)
+
+      page.within '#js-general-pipeline-settings' do
+        expect(page).to have_button('Save changes', disabled: false)
+      end
 
       checkbox = find_field('project_auto_cancel_pending_pipelines')
       expect(checkbox).to be_checked
@@ -51,13 +64,16 @@ describe "Projects > Settings > Pipelines settings" do
       it 'update auto devops settings' do
         visit project_settings_ci_cd_path(project)
 
-        fill_in('project_auto_devops_attributes_domain', with: 'test.com')
-        page.choose('project_auto_devops_attributes_enabled_false')
-        click_on 'Save changes'
+        page.within '#autodevops-settings' do
+          fill_in('project_auto_devops_attributes_domain', with: 'test.com')
+          page.choose('project_auto_devops_attributes_enabled_false')
+          click_on 'Save changes'
+        end
 
         expect(page.status_code).to eq(200)
         expect(project.auto_devops).to be_present
         expect(project.auto_devops).not_to be_enabled
+        expect(project.auto_devops.domain).to eq('test.com')
       end
     end
   end
diff --git a/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb b/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb
index a906fa20233b50f405af686c62f75aa64b9a3e1e..e44361fbe267cdbc817fe7e98e581d1b9e9a9725 100644
--- a/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb
+++ b/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb
@@ -65,7 +65,7 @@ describe 'Projects > Show > User sees setup shortcut buttons' do
       describe 'Auto DevOps button' do
         it '"Enable Auto DevOps" button linked to settings page' do
           page.within('.project-stats') do
-            expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'js-general-pipeline-settings'))
+            expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings'))
           end
         end
 
@@ -75,7 +75,7 @@ describe 'Projects > Show > User sees setup shortcut buttons' do
           visit project_path(project)
 
           page.within('.project-stats') do
-            expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'js-general-pipeline-settings'))
+            expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings'))
           end
         end
       end
@@ -212,7 +212,7 @@ describe 'Projects > Show > User sees setup shortcut buttons' do
       describe 'Auto DevOps button' do
         it '"Enable Auto DevOps" button linked to settings page' do
           page.within('.project-stats') do
-            expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'js-general-pipeline-settings'))
+            expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings'))
           end
         end
 
@@ -222,7 +222,7 @@ describe 'Projects > Show > User sees setup shortcut buttons' do
           visit project_path(project)
 
           page.within('.project-stats') do
-            expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'js-general-pipeline-settings'))
+            expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings'))
           end
         end
 
diff --git a/spec/javascripts/settings_panels_spec.js b/spec/javascripts/settings_panels_spec.js
index d433f8c3e074dfe12fd04f86807fe7321d7b9721..4fba36bd4def56cf47caa5882e00f12c376dacd0 100644
--- a/spec/javascripts/settings_panels_spec.js
+++ b/spec/javascripts/settings_panels_spec.js
@@ -13,9 +13,9 @@ describe('Settings Panels', () => {
     });
 
     it('should expand linked hash fragment panel', () => {
-      location.hash = '#js-general-pipeline-settings';
+      location.hash = '#autodevops-settings';
 
-      const pipelineSettingsPanel = document.querySelector('#js-general-pipeline-settings');
+      const pipelineSettingsPanel = document.querySelector('#autodevops-settings');
       // Our test environment automatically expands everything so we need to clear that out first
       pipelineSettingsPanel.classList.remove('expanded');
 
diff --git a/spec/presenters/project_presenter_spec.rb b/spec/presenters/project_presenter_spec.rb
index 55962f345d4d0f9a6b5a10264e6211b47a6425ab..0a130c59037e91e6a86b76269359d698f3cc42be 100644
--- a/spec/presenters/project_presenter_spec.rb
+++ b/spec/presenters/project_presenter_spec.rb
@@ -321,7 +321,7 @@ describe ProjectPresenter do
 
           expect(presenter.autodevops_anchor_data).to eq(OpenStruct.new(enabled: false,
                                                                         label: 'Enable Auto DevOps',
-                                                                        link: presenter.project_settings_ci_cd_path(project, anchor: 'js-general-pipeline-settings')))
+                                                                        link: presenter.project_settings_ci_cd_path(project, anchor: 'autodevops-settings')))
         end
       end
     end
diff --git a/spec/views/projects/settings/ci_cd/_form.html.haml_spec.rb b/spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb
similarity index 96%
rename from spec/views/projects/settings/ci_cd/_form.html.haml_spec.rb
rename to spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb
index be9a4d9c57c45a8c81d0a2680590a791557ff71a..d15391911c1349e7e6dbd76b80da527d2dc723c1 100644
--- a/spec/views/projects/settings/ci_cd/_form.html.haml_spec.rb
+++ b/spec/views/projects/settings/ci_cd/_autodevops_form.html.haml_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe 'projects/settings/ci_cd/_form' do
+describe 'projects/settings/ci_cd/_autodevops_form' do
   let(:project) { create(:project, :repository) }
 
   before do