diff --git a/CHANGELOG b/CHANGELOG
index 5fcb354ca81bad3dc7d99586be38a3e506ea3ef6..db5ef402ad52937fb290c69b1e75d2b43eddfdbb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date.
 
 v 8.1.0 (unreleased)
   - Show CI status on all pages where commits list is rendered
+  - Automatically enable CI when push .gitlab-ci.yml file to repository
 
 v 8.0.1
   - Improve CI migration procedure and documentation
diff --git a/app/models/project.rb b/app/models/project.rb
index 721208851058b87b5673e26c87ba693024aad1eb..a7ea1236b8686d76bbdfad545c0762eaf136ee2b 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -739,4 +739,14 @@ class Project < ActiveRecord::Base
   def ci_commit(sha)
     gitlab_ci_project.commits.find_by(sha: sha) if gitlab_ci?
   end
+
+  def enable_ci(user)
+    # Enable service
+    service = gitlab_ci_service || create_gitlab_ci_service
+    service.active = true
+    service.save
+
+    # Create Ci::Project
+    Ci::CreateProjectService.new.execute(user, self)
+  end
 end
diff --git a/app/models/project_services/gitlab_ci_service.rb b/app/models/project_services/gitlab_ci_service.rb
index 9e2b3bcd87396e24223a91e2e15632d54915c6e0..ec3bd44024f77628a3d2ef728d281604ac38f05c 100644
--- a/app/models/project_services/gitlab_ci_service.rb
+++ b/app/models/project_services/gitlab_ci_service.rb
@@ -72,7 +72,7 @@ class GitlabCiService < CiService
     })
 
     ci_project = Ci::Project.find_by!(gitlab_id: project.id)
-    
+
     Ci::CreateProjectService.new.execute(
       current_user,
       params,
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index 0a73244774a20c22ea070c97215a6f4854d4e4a6..8193b6e192dfbf841f464533a58d9874bd564092 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -55,6 +55,12 @@ class GitPushService
 
     @push_data = build_push_data(oldrev, newrev, ref)
 
+    # If CI was disabled but .gitlab-ci.yml file was pushed
+    # we enable CI automatically
+    if !project.gitlab_ci? && gitlab_ci_yaml?(newrev)
+      project.enable_ci(user)
+    end
+
     EventCreateService.new.push(project, user, @push_data)
     project.execute_hooks(@push_data.dup, :push_hooks)
     project.execute_services(@push_data.dup, :push_hooks)
@@ -143,4 +149,10 @@ class GitPushService
   def commit_user(commit)
     commit.author || user
   end
+
+  def gitlab_ci_yaml?(sha)
+    @project.repository.blob_at(sha, '.gitlab-ci.yml')
+  rescue Rugged::ReferenceError
+    nil
+  end
 end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index ba57e31f7fe6de43d9dc62050a14043d456cb389..9e7b6f5cb30ee5ffce3f16b76757437f16588692 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -411,4 +411,14 @@ describe Project do
 
     it { expect(project.ci_commit(commit.sha)).to eq(commit) }
   end
+
+  describe :enable_ci do
+    let(:project) { create :project }
+    let(:user) { create :user }
+
+    before { project.enable_ci(user) }
+
+    it { expect(project.gitlab_ci?).to be_truthy }
+    it { expect(project.gitlab_ci_project).to be_a(Ci::Project) }
+  end
 end