diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index bbc358adb830a52a0504040ffde7b51725f588ca..8371c2d8c72e7e83940c0e6e3efea27ba2d19da1 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -214,7 +214,13 @@ module Ci
     def cancel_running
       Gitlab::OptimisticLocking.retry_lock(
         statuses.cancelable) do |cancelable|
-          cancelable.each(&:cancel)
+          cancelable.each do |status|
+            if status.created?
+              status.skip
+            elsif status.active?
+              status.cancel
+            end
+          end
         end
     end
 
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 4a064644d64e1d29c04673cc50b25b7deb615e11..9547c57b2ae3374dd2b5f040cf07a074af09a193 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -65,8 +65,7 @@ class CommitStatus < ActiveRecord::Base
     end
 
     event :cancel do
-      transition [:created] => :skipped
-      transition [:pending, :running] => :canceled
+      transition [:created, :pending, :running] => :canceled
     end
 
     before_transition created: [:pending, :running] do |commit_status|
diff --git a/spec/requests/api/commit_statuses_spec.rb b/spec/requests/api/commit_statuses_spec.rb
index 88361def3cf18999a64e5ded985a8f288a662bf9..ee5865ad74073da371a6e43e0df2672c8e8fd745 100644
--- a/spec/requests/api/commit_statuses_spec.rb
+++ b/spec/requests/api/commit_statuses_spec.rb
@@ -5,12 +5,15 @@ describe API::CommitStatuses, api: true do
 
   let!(:project) { create(:project, :repository) }
   let(:commit) { project.repository.commit }
-  let(:commit_status) { create(:commit_status, pipeline: pipeline) }
   let(:guest) { create_user(:guest) }
   let(:reporter) { create_user(:reporter) }
   let(:developer) { create_user(:developer) }
   let(:sha) { commit.id }
 
+  let(:commit_status) do
+    create(:commit_status, status: :pending, pipeline: pipeline)
+  end
+
   describe "GET /projects/:id/repository/commits/:sha/statuses" do
     let(:get_url) { "/projects/#{project.id}/repository/commits/#{sha}/statuses" }