Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
7f59d54d
Commit
7f59d54d
authored
Apr 30, 2020
by
Hordur Freyr Yngvason
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move Auto DevOps Deploy.gitlab-ci.yml to rules
Part of
https://gitlab.com/gitlab-org/gitlab/-/issues/213336
parent
8f803264
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
301 additions
and
81 deletions
+301
-81
changelogs/unreleased/move-deploy-template-to-rules-syntax.yml
...elogs/unreleased/move-deploy-template-to-rules-syntax.yml
+5
-0
lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
+73
-76
spec/lib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb
...ib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb
+222
-0
spec/lib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb
...ib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb
+1
-5
No files found.
changelogs/unreleased/move-deploy-template-to-rules-syntax.yml
0 → 100644
View file @
7f59d54d
---
title
:
Move Deploy.gitlab-ci.yml to `rules` syntax
merge_request
:
31290
author
:
type
:
changed
lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
View file @
7f59d54d
...
...
@@ -18,16 +18,14 @@ review:
on_stop
:
stop_review
artifacts
:
paths
:
[
environment_url.txt
]
only
:
refs
:
-
branches
-
tags
kubernetes
:
active
except
:
refs
:
-
master
variables
:
-
$REVIEW_DISABLED
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"'
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
stop_review
:
extends
:
.auto-deploy
...
...
@@ -41,18 +39,16 @@ stop_review:
name
:
review/$CI_COMMIT_REF_NAME
action
:
stop
dependencies
:
[]
when
:
manual
allow_failure
:
true
only
:
refs
:
-
branches
-
tags
kubernetes
:
active
except
:
refs
:
-
master
variables
:
-
$REVIEW_DISABLED
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"'
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
when
:
manual
# Staging deploys are disabled by default since
# continuous deployment to production is enabled by default
...
...
@@ -73,12 +69,12 @@ staging:
environment
:
name
:
staging
url
:
http://$CI_PROJECT_PATH_SLUG-staging.$KUBE_INGRESS_BASE_DOMAIN
only
:
refs
:
-
mast
er
kubernetes
:
active
variables
:
-
$STAGING_ENABLED
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
nev
er
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"'
when
:
never
-
if
:
'
$STAGING_ENABLED'
# Canaries are disabled by default, but if you want them,
# and know what the downsides are, you can enable this by setting
...
...
@@ -97,13 +93,13 @@ canary:
environment
:
name
:
production
url
:
http://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN
when
:
manual
only
:
refs
:
-
master
kubernetes
:
active
variables
:
-
$CANARY_ENABLED
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"'
when
:
never
-
if
:
'
$CANARY_ENABLED'
when
:
manual
.production
:
&production_template
extends
:
.auto-deploy
...
...
@@ -126,32 +122,33 @@ canary:
production
:
<<
:
*production_template
only
:
refs
:
-
master
kubernetes
:
active
except
:
variables
:
-
$STAGING_ENABLED
-
$CANARY_ENABLED
-
$INCREMENTAL_ROLLOUT_ENABLED
-
$INCREMENTAL_ROLLOUT_MODE
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$STAGING_ENABLED'
when
:
never
-
if
:
'
$CANARY_ENABLED'
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_ENABLED'
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"'
production_manual
:
<<
:
*production_template
when
:
manual
allow_failure
:
false
only
:
refs
:
-
mast
er
kubernetes
:
active
variables
:
-
$STAGING_ENABLED
-
$CANARY_ENABLED
except
:
variables
:
-
$INCREMENTAL_ROLLOUT_ENABLED
-
$INCREMENTAL_ROLLOUT_MODE
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
nev
er
-
if
:
'
$INCREMENTAL_ROLLOUT_ENABLED'
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
&&
$STAGING_ENABLED'
when
:
manual
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
&&
$CANARY_ENABLED'
when
:
manual
# This job implements incremental rollout on for every push to `master`.
...
...
@@ -176,29 +173,29 @@ production_manual:
.manual_rollout_template
:
&manual_rollout_template
<<
:
*rollout_template
stage
:
production
when
:
manual
# This selectors are backward compatible mode with $INCREMENTAL_ROLLOUT_ENABLED (before 11.4)
only
:
refs
:
-
master
kubernetes
:
active
variables
:
-
$INCREMENTAL_ROLLOUT_MODE == "manual"
-
$INCREMENTAL_ROLLOUT_ENABLED
except
:
variables
:
-
$INCREMENTAL_ROLLOUT_MODE == "timed"
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"timed"'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"'
when
:
never
# $INCREMENTAL_ROLLOUT_ENABLED is for compamtibilty with pre-GitLab 11.4 syntax
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"manual"
||
$INCREMENTAL_ROLLOUT_ENABLED'
when
:
manual
.timed_rollout_template
:
&timed_rollout_template
<<
:
*rollout_template
when
:
delayed
start_in
:
5 minutes
only
:
refs
:
-
master
kubernetes
:
active
variables
:
-
$INCREMENTAL_ROLLOUT_MODE == "timed"
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"manual"'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"'
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"timed"'
when
:
delayed
start_in
:
5 minutes
timed rollout 10%
:
<<
:
*timed_rollout_template
...
...
spec/lib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb
0 → 100644
View file @
7f59d54d
# frozen_string_literal: true
require
'spec_helper'
describe
'Jobs/Deploy.gitlab-ci.yml'
do
subject
(
:template
)
do
<<~
YAML
stages:
- test
- review
- staging
- canary
- production
- incremental rollout 10%
- incremental rollout 25%
- incremental rollout 50%
- incremental rollout 100%
- cleanup
include:
- template: Jobs/Deploy.gitlab-ci.yml
placeholder:
script:
- echo "Ensure at least one job to keep pipeline validator happy"
YAML
end
describe
'the created pipeline'
do
let
(
:user
)
{
create
(
:admin
)
}
let
(
:project
)
{
create
(
:project
,
:repository
)
}
let
(
:default_branch
)
{
'master'
}
let
(
:pipeline_ref
)
{
default_branch
}
let
(
:service
)
{
Ci
::
CreatePipelineService
.
new
(
project
,
user
,
ref:
pipeline_ref
)
}
let
(
:pipeline
)
{
service
.
execute!
(
:push
)
}
let
(
:build_names
)
{
pipeline
.
builds
.
pluck
(
:name
)
}
before
do
stub_ci_pipeline_yaml_file
(
template
)
allow_any_instance_of
(
Ci
::
BuildScheduleWorker
).
to
receive
(
:perform
).
and_return
(
true
)
allow
(
project
).
to
receive
(
:default_branch
).
and_return
(
default_branch
)
end
context
'with no cluster'
do
it
'does not create any kubernetes deployment jobs'
do
expect
(
build_names
).
to
eq
%w(placeholder)
end
end
context
'with only a disabled cluster'
do
let!
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
,
enabled:
false
,
projects:
[
project
])
}
it
'does not create any kubernetes deployment jobs'
do
expect
(
build_names
).
to
eq
%w(placeholder)
end
end
context
'with an active cluster'
do
let!
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
,
projects:
[
project
])
}
context
'on master'
do
it
'by default'
do
expect
(
build_names
).
to
include
(
'production'
)
expect
(
build_names
).
not_to
include
(
'review'
)
end
it
'when CANARY_ENABLED'
do
create
(
:ci_variable
,
project:
project
,
key:
'CANARY_ENABLED'
,
value:
'true'
)
expect
(
build_names
).
to
include
(
'production_manual'
)
expect
(
build_names
).
to
include
(
'canary'
)
expect
(
build_names
).
not_to
include
(
'production'
)
end
it
'when STAGING_ENABLED'
do
create
(
:ci_variable
,
project:
project
,
key:
'STAGING_ENABLED'
,
value:
'true'
)
expect
(
build_names
).
to
include
(
'production_manual'
)
expect
(
build_names
).
to
include
(
'staging'
)
expect
(
build_names
).
not_to
include
(
'production'
)
end
it
'when INCREMENTAL_ROLLOUT_MODE == timed'
do
create
(
:ci_variable
,
project:
project
,
key:
'INCREMENTAL_ROLLOUT_ENABLED'
,
value:
'true'
)
create
(
:ci_variable
,
project:
project
,
key:
'INCREMENTAL_ROLLOUT_MODE'
,
value:
'timed'
)
expect
(
build_names
).
not_to
include
(
'production_manual'
)
expect
(
build_names
).
not_to
include
(
'production'
)
expect
(
build_names
).
not_to
include
(
'rollout 10%'
,
'rollout 25%'
,
'rollout 50%'
,
'rollout 100%'
)
expect
(
build_names
).
to
include
(
'timed rollout 10%'
,
'timed rollout 25%'
,
'timed rollout 50%'
,
'timed rollout 100%'
)
end
it
'when INCREMENTAL_ROLLOUT_ENABLED'
do
create
(
:ci_variable
,
project:
project
,
key:
'INCREMENTAL_ROLLOUT_ENABLED'
,
value:
'true'
)
expect
(
build_names
).
not_to
include
(
'production_manual'
)
expect
(
build_names
).
not_to
include
(
'production'
)
expect
(
build_names
).
not_to
include
(
'timed rollout 10%'
,
'timed rollout 25%'
,
'timed rollout 50%'
,
'timed rollout 100%'
)
expect
(
build_names
).
to
include
(
'rollout 10%'
,
'rollout 25%'
,
'rollout 50%'
,
'rollout 100%'
)
end
it
'when INCREMENTAL_ROLLOUT_MODE == manual'
do
create
(
:ci_variable
,
project:
project
,
key:
'INCREMENTAL_ROLLOUT_MODE'
,
value:
'manual'
)
expect
(
build_names
).
not_to
include
(
'production_manual'
)
expect
(
build_names
).
not_to
include
(
'production'
)
expect
(
build_names
).
not_to
include
(
'timed rollout 10%'
,
'timed rollout 25%'
,
'timed rollout 50%'
,
'timed rollout 100%'
)
expect
(
build_names
).
to
include
(
'rollout 10%'
,
'rollout 25%'
,
'rollout 50%'
,
'rollout 100%'
)
end
end
shared_examples_for
'review app deployment'
do
it
'creates the review and stop_review jobs but no production jobs'
do
expect
(
build_names
).
to
include
(
'review'
)
expect
(
build_names
).
to
include
(
'stop_review'
)
expect
(
build_names
).
not_to
include
(
'production'
)
expect
(
build_names
).
not_to
include
(
'production_manual'
)
expect
(
build_names
).
not_to
include
(
'staging'
)
expect
(
build_names
).
not_to
include
(
'canary'
)
expect
(
build_names
).
not_to
include
(
'timed rollout 10%'
)
expect
(
build_names
).
not_to
include
(
'timed rollout 25%'
)
expect
(
build_names
).
not_to
include
(
'timed rollout 50%'
)
expect
(
build_names
).
not_to
include
(
'timed rollout 100%'
)
expect
(
build_names
).
not_to
include
(
'rollout 10%'
)
expect
(
build_names
).
not_to
include
(
'rollout 25%'
)
expect
(
build_names
).
not_to
include
(
'rollout 50%'
)
expect
(
build_names
).
not_to
include
(
'rollout 100%'
)
end
it
'does not include review when REVIEW_DISABLED'
do
create
(
:ci_variable
,
project:
project
,
key:
'REVIEW_DISABLED'
,
value:
'true'
)
expect
(
build_names
).
not_to
include
(
'review'
)
expect
(
build_names
).
not_to
include
(
'stop_review'
)
end
end
context
'on branch'
do
let
(
:pipeline_ref
)
{
'feature'
}
before
do
allow_any_instance_of
(
Gitlab
::
Ci
::
Pipeline
::
Chain
::
Validate
::
Repository
).
to
receive
(
:perform!
).
and_return
(
true
)
end
it_behaves_like
'review app deployment'
context
'when INCREMENTAL_ROLLOUT_ENABLED'
do
before
do
create
(
:ci_variable
,
project:
project
,
key:
'INCREMENTAL_ROLLOUT_ENABLED'
,
value:
'true'
)
end
it_behaves_like
'review app deployment'
end
context
'when INCREMENTAL_ROLLOUT_MODE == "timed"'
do
before
do
create
(
:ci_variable
,
project:
project
,
key:
'INCREMENTAL_ROLLOUT_MODE'
,
value:
'timed'
)
end
it_behaves_like
'review app deployment'
end
context
'when INCREMENTAL_ROLLOUT_MODE == "manual"'
do
before
do
create
(
:ci_variable
,
project:
project
,
key:
'INCREMENTAL_ROLLOUT_MODE'
,
value:
'manual'
)
end
it_behaves_like
'review app deployment'
end
end
context
'on tag'
do
let
(
:pipeline_ref
)
{
'v1.0.0'
}
it_behaves_like
'review app deployment'
end
context
'on merge request'
do
let
(
:service
)
{
MergeRequests
::
CreatePipelineService
.
new
(
project
,
user
)
}
let
(
:merge_request
)
{
create
(
:merge_request
,
:simple
,
source_project:
project
)
}
let
(
:pipeline
)
{
service
.
execute
(
merge_request
)
}
it
'has no jobs'
do
expect
(
pipeline
).
to
be_merge_request_event
expect
(
build_names
).
to
be_empty
end
end
end
end
end
spec/lib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb
View file @
7f59d54d
...
...
@@ -40,11 +40,7 @@ describe 'Auto-DevOps.gitlab-ci.yml' do
end
context
'when the project has an active cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
,
projects:
[
project
])
}
before
do
allow
(
cluster
).
to
receive
(
:active?
).
and_return
(
true
)
end
let!
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
,
projects:
[
project
])
}
describe
'deployment-related builds'
do
context
'on default branch'
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment