diff --git a/CHANGELOG b/CHANGELOG
index fdb306330469abea46b5c63500111d16565b47b0..f34f79d18dd48395d16b8a533e3a3ffa3e24d998 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -14,6 +14,7 @@ v 8.1.0 (unreleased)
   - Add notes and SSL verification entries to hook APIs (Ben Boeckel)
   - Fix grammar in admin area "labels" .nothing-here-block when no labels exist.
   - Move CI runners page to project settings area
+  - Move CI variables page to project settings area
 
 v 8.0.3
   - Fix URL shown in Slack notifications
diff --git a/app/controllers/ci/variables_controller.rb b/app/controllers/ci/variables_controller.rb
deleted file mode 100644
index 9c6c775fde805c990304265d7b21fa3c59326345..0000000000000000000000000000000000000000
--- a/app/controllers/ci/variables_controller.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-module Ci
-  class VariablesController < Ci::ApplicationController
-    before_action :authenticate_user!
-    before_action :project
-    before_action :authorize_access_project!
-    before_action :authorize_manage_project!
-
-    layout 'ci/project'
-
-    def show
-    end
-
-    def update
-      if project.update_attributes(project_params)
-        Ci::EventService.new.change_project_settings(current_user, project)
-
-        redirect_to ci_project_variables_path(project), notice: 'Variables were successfully updated.'
-      else
-        render action: 'show'
-      end
-    end
-
-    private
-
-    def project
-      @project ||= Ci::Project.find(params[:project_id])
-    end
-
-    def project_params
-      params.require(:project).permit({ variables_attributes: [:id, :key, :value, :_destroy] })
-    end
-  end
-end
diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb
index 48c922f450c085b820821346d6e2d23d839704a2..56a63ce97588b03af468492c5b0e2e3b977f1e1c 100644
--- a/app/controllers/projects/application_controller.rb
+++ b/app/controllers/projects/application_controller.rb
@@ -31,4 +31,8 @@ def require_branch_head
   def ci_enabled
     return render_404 unless @project.gitlab_ci?
   end
+
+  def ci_project
+    @ci_project ||= @project.gitlab_ci_project
+  end
 end
diff --git a/app/controllers/projects/runners_controller.rb b/app/controllers/projects/runners_controller.rb
index d59884a1dd7c4cb13920cbd7c8977dc585d12488..6cb6e3ef6d4412b096db084a4da945fcf29a4525 100644
--- a/app/controllers/projects/runners_controller.rb
+++ b/app/controllers/projects/runners_controller.rb
@@ -55,10 +55,6 @@ def show
 
   protected
 
-  def ci_project
-    @ci_project = @project.gitlab_ci_project
-  end
-
   def set_runner
     @runner ||= @ci_project.runners.find(params[:id])
   end
diff --git a/app/controllers/projects/variables_controller.rb b/app/controllers/projects/variables_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d6561a45a701f52fb616869f0ce0bd92cc256061
--- /dev/null
+++ b/app/controllers/projects/variables_controller.rb
@@ -0,0 +1,25 @@
+class Projects::VariablesController < Projects::ApplicationController
+  before_action :ci_project
+  before_action :authorize_admin_project!
+
+  layout 'project_settings'
+
+  def show
+  end
+
+  def update
+    if ci_project.update_attributes(project_params)
+      Ci::EventService.new.change_project_settings(current_user, ci_project)
+
+      redirect_to namespace_project_variables_path(project.namespace, project), notice: 'Variables were successfully updated.'
+    else
+      render action: 'show'
+    end
+  end
+
+  private
+
+  def project_params
+    params.require(:project).permit({ variables_attributes: [:id, :key, :value, :_destroy] })
+  end
+end
diff --git a/app/views/layouts/ci/_nav_project.html.haml b/app/views/layouts/ci/_nav_project.html.haml
index 9ebe7eabd8e4ca0d745623f539f5bb953f2b3f29..4b0dc4fc2f5c663a22624dd7929d65d119869f00 100644
--- a/app/views/layouts/ci/_nav_project.html.haml
+++ b/app/views/layouts/ci/_nav_project.html.haml
@@ -11,11 +11,6 @@
       %span
         Commits
         %span.count= @project.commits.count
-    = nav_link path: 'variables#show' do
-      = link_to ci_project_variables_path(@project) do
-        = icon('code fw')
-        %span
-          Variables
     = nav_link path: 'web_hooks#index' do
       = link_to ci_project_web_hooks_path(@project) do
         = icon('link fw')
diff --git a/app/views/layouts/nav/_project_settings.html.haml b/app/views/layouts/nav/_project_settings.html.haml
index a85dd71126cef2d8aa30047c986c64c64f148fc4..c8975fb84921b5d1236203303586e5c897019aba 100644
--- a/app/views/layouts/nav/_project_settings.html.haml
+++ b/app/views/layouts/nav/_project_settings.html.haml
@@ -40,3 +40,8 @@
           = icon('cog fw')
           %span
             Runners
+      = nav_link(controller: :variables) do
+        = link_to namespace_project_variables_path(@project.namespace, @project) do
+          = icon('code fw')
+          %span
+            Variables
diff --git a/app/views/ci/variables/show.html.haml b/app/views/projects/variables/show.html.haml
similarity index 77%
rename from app/views/ci/variables/show.html.haml
rename to app/views/projects/variables/show.html.haml
index ebf68341e08851e3cce6b890d6cc4c40a7926bbb..29416a94ff6869a692fc63f101c950f33922d7d1 100644
--- a/app/views/ci/variables/show.html.haml
+++ b/app/views/projects/variables/show.html.haml
@@ -1,21 +1,21 @@
 %h3.page-title
   Secret Variables
 
-%p.light 
+%p.light
   These variables will be set to environment by the runner and will be hidden in the build log.
   %br
-  So you can use them for passwords, secret keys or whatever you want.  
+  So you can use them for passwords, secret keys or whatever you want.
 
 %hr
 
 
-= nested_form_for @project, url: url_for(controller: 'ci/variables', action: 'update'), html: { class: 'form-horizontal' }  do |f|
+= nested_form_for @ci_project, url: url_for(controller: 'projects/variables', action: 'update'), html: { class: 'form-horizontal' }  do |f|
   - if @project.errors.any?
     #error_explanation
-      %p.lead= "#{pluralize(@project.errors.count, "error")} prohibited this project from being saved:"
+      %p.lead= "#{pluralize(@ci_project.errors.count, "error")} prohibited this project from being saved:"
       .alert.alert-error
         %ul
-          - @project.errors.full_messages.each do |msg|
+          - @ci_project.errors.full_messages.each do |msg|
             %li= msg
 
   = f.fields_for :variables do |variable_form|
diff --git a/config/routes.rb b/config/routes.rb
index 201add02335b5078dc1173ac40ad28e9d27240ab..776b606bf7d789fe650d2b76996a77d2b0b0293d 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -58,7 +58,6 @@
       resources :runner_projects, only: [:create, :destroy]
 
       resources :events, only: [:index]
-      resource :variables, only: [:show, :update]
     end
 
     resource :user_sessions do
@@ -591,6 +590,7 @@
         resources :branches, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
         resources :tags, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
         resources :protected_branches, only: [:index, :create, :update, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
+        resource :variables, only: [:show, :update]
 
         resources :hooks, only: [:index, :create, :destroy], constraints: { id: /\d+/ } do
           member do
diff --git a/spec/features/ci/variables_spec.rb b/spec/features/variables_spec.rb
similarity index 68%
rename from spec/features/ci/variables_spec.rb
rename to spec/features/variables_spec.rb
index e387b3be555d29ce6b3dc2bfb67e67416a0d3615..adb602f3edd211e8862033ab9b2529fb64a07722 100644
--- a/spec/features/ci/variables_spec.rb
+++ b/spec/features/variables_spec.rb
@@ -1,28 +1,25 @@
 require 'spec_helper'
 
 describe "Variables" do
-  let(:user)    { create(:user) }
-
-  before do
-    login_as(user)
-  end
+  let(:user) { create(:user) }
+  before { login_as(user) }
 
   describe "specific runners" do
     before do
       @project = FactoryGirl.create :ci_project
-      @project.gl_project.team << [user, :master]
+      @gl_project = @project.gl_project
+      @gl_project.team << [user, :master]
     end
 
     it "creates variable", js: true do
-      visit ci_project_variables_path(@project)
+      visit namespace_project_variables_path(@gl_project.namespace, @gl_project)
       click_on "Add a variable"
       fill_in "Key", with: "SECRET_KEY"
       fill_in "Value", with: "SECRET_VALUE"
       click_on "Save changes"
-      
+
       expect(page).to have_content("Variables were successfully updated.")
       expect(@project.variables.count).to eq(1)
     end
-
   end
 end