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
43844925
Commit
43844925
authored
Feb 25, 2021
by
Mitchell Cash
Committed by
Thong Kuah
Feb 25, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix Auto DevOps deploys that use a default branch that's not `master`
parent
dbe5012f
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
222 additions
and
209 deletions
+222
-209
changelogs/unreleased/auto-devops-default-branch-deploy.yml
changelogs/unreleased/auto-devops-default-branch-deploy.yml
+5
-0
lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
+9
-9
lib/gitlab/ci/templates/Jobs/Deploy.latest.gitlab-ci.yml
lib/gitlab/ci/templates/Jobs/Deploy.latest.gitlab-ci.yml
+9
-9
lib/gitlab/ci/templates/Jobs/Deploy/EC2.gitlab-ci.yml
lib/gitlab/ci/templates/Jobs/Deploy/EC2.gitlab-ci.yml
+2
-2
lib/gitlab/ci/templates/Jobs/Deploy/ECS.gitlab-ci.yml
lib/gitlab/ci/templates/Jobs/Deploy/ECS.gitlab-ci.yml
+6
-6
spec/factories/projects.rb
spec/factories/projects.rb
+1
-1
spec/lib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb
...ib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb
+190
-182
No files found.
changelogs/unreleased/auto-devops-default-branch-deploy.yml
0 → 100644
View file @
43844925
---
title
:
Fix Auto DevOps deploys that use a default branch that's not named 'master'
merge_request
:
53280
author
:
Mitchell Cash @MitchellCash
type
:
fixed
lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
View file @
43844925
...
...
@@ -23,7 +23,7 @@ review:
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
...
...
@@ -44,7 +44,7 @@ stop_review:
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
...
...
@@ -73,7 +73,7 @@ staging:
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$STAGING_ENABLED'
...
...
@@ -98,7 +98,7 @@ canary:
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CANARY_ENABLED'
when
:
manual
...
...
@@ -136,7 +136,7 @@ production:
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
production_manual
:
<<
:
*production_template
...
...
@@ -148,9 +148,9 @@ production_manual:
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
&&
$STAGING_ENABLED'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
&&
$STAGING_ENABLED'
when
:
manual
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
&&
$CANARY_ENABLED'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
&&
$CANARY_ENABLED'
when
:
manual
# This job implements incremental rollout on for every push to `master`.
...
...
@@ -184,7 +184,7 @@ production_manual:
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"timed"'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
# $INCREMENTAL_ROLLOUT_ENABLED is for compatibility with pre-GitLab 11.4 syntax
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"manual"
||
$INCREMENTAL_ROLLOUT_ENABLED'
...
...
@@ -197,7 +197,7 @@ production_manual:
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"manual"'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"timed"'
when
:
delayed
...
...
lib/gitlab/ci/templates/Jobs/Deploy.latest.gitlab-ci.yml
View file @
43844925
...
...
@@ -23,7 +23,7 @@ review:
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
...
...
@@ -44,7 +44,7 @@ stop_review:
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
...
...
@@ -73,7 +73,7 @@ staging:
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$STAGING_ENABLED'
...
...
@@ -98,7 +98,7 @@ canary:
rules
:
-
if
:
'
$CI_KUBERNETES_ACTIVE
==
null
||
$CI_KUBERNETES_ACTIVE
==
""'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CANARY_ENABLED'
when
:
manual
...
...
@@ -135,7 +135,7 @@ production:
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
production_manual
:
<<
:
*production_template
...
...
@@ -147,9 +147,9 @@ production_manual:
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
&&
$STAGING_ENABLED'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
&&
$STAGING_ENABLED'
when
:
manual
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
&&
$CANARY_ENABLED'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
&&
$CANARY_ENABLED'
when
:
manual
# This job implements incremental rollout on for every push to `master`.
...
...
@@ -181,7 +181,7 @@ production_manual:
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"timed"'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
# $INCREMENTAL_ROLLOUT_ENABLED is for compatibility with pre-GitLab 11.4 syntax
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"manual"
||
$INCREMENTAL_ROLLOUT_ENABLED'
...
...
@@ -194,7 +194,7 @@ production_manual:
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"manual"'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$INCREMENTAL_ROLLOUT_MODE
==
"timed"'
when
:
delayed
...
...
lib/gitlab/ci/templates/Jobs/Deploy/EC2.gitlab-ci.yml
View file @
43844925
...
...
@@ -20,7 +20,7 @@ review_ec2:
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
...
...
@@ -34,6 +34,6 @@ production_ec2:
when
:
never
-
if
:
'
$CI_KUBERNETES_ACTIVE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
lib/gitlab/ci/templates/Jobs/Deploy/ECS.gitlab-ci.yml
View file @
43844925
...
...
@@ -46,7 +46,7 @@ review_ecs:
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
...
...
@@ -62,7 +62,7 @@ stop_review_ecs:
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
when
:
manual
...
...
@@ -81,7 +81,7 @@ review_fargate:
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
...
...
@@ -97,7 +97,7 @@ stop_review_fargate:
when
:
never
-
if
:
'
$REVIEW_DISABLED'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
==
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
==
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
when
:
manual
...
...
@@ -109,7 +109,7 @@ production_ecs:
when
:
never
-
if
:
'
$CI_KUBERNETES_ACTIVE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
...
...
@@ -120,6 +120,6 @@ production_fargate:
when
:
never
-
if
:
'
$CI_KUBERNETES_ACTIVE'
when
:
never
-
if
:
'
$CI_COMMIT_BRANCH
!=
"master"
'
-
if
:
'
$CI_COMMIT_BRANCH
!=
$CI_DEFAULT_BRANCH
'
when
:
never
-
if
:
'
$CI_COMMIT_TAG
||
$CI_COMMIT_BRANCH'
spec/factories/projects.rb
View file @
43844925
...
...
@@ -194,7 +194,7 @@ FactoryBot.define do
filename
,
content
,
message:
"Automatically created file
#{
filename
}
"
,
branch_name:
'master'
branch_name:
project
.
default_branch_or_master
)
end
end
...
...
spec/lib/gitlab/ci/templates/auto_devops_gitlab_ci_yaml_spec.rb
View file @
43844925
...
...
@@ -3,252 +3,260 @@
require
'spec_helper'
RSpec
.
describe
'Auto-DevOps.gitlab-ci.yml'
do
using
RSpec
::
Parameterized
::
TableSyntax
subject
(
:template
)
{
Gitlab
::
Template
::
GitlabCiYmlTemplate
.
find
(
'Auto-DevOps'
)
}
describe
'the created pipeline'
do
let
(
:default_branch
)
{
'master'
}
let
(
:pipeline_branch
)
{
default_branch
}
let
(
:project
)
{
create
(
:project
,
:auto_devops
,
:custom_repo
,
files:
{
'README.md'
=>
''
})
}
let
(
:user
)
{
project
.
owner
}
let
(
:service
)
{
Ci
::
CreatePipelineService
.
new
(
project
,
user
,
ref:
pipeline_branch
)
}
let
(
:pipeline
)
{
service
.
execute!
(
:push
)
}
let
(
:build_names
)
{
pipeline
.
builds
.
pluck
(
:name
)
}
before
do
stub_ci_pipeline_yaml_file
(
template
.
content
)
allow_any_instance_of
(
Ci
::
BuildScheduleWorker
).
to
receive
(
:perform
).
and_return
(
true
)
allow
(
project
).
to
receive
(
:default_branch
).
and_return
(
default_branch
)
end
where
(
:default_branch
)
do
%w[master main]
end
shared_examples
'no Kubernetes deployment job'
do
it
'does not create any Kubernetes deployment-related builds'
do
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
(
'review'
)
expect
(
build_names
).
not_to
include
(
a_string_matching
(
/rollout \d+%/
))
end
end
with_them
do
describe
'the created pipeline'
do
let
(
:pipeline_branch
)
{
default_branch
}
let
(
:project
)
{
create
(
:project
,
:auto_devops
,
:custom_repo
,
files:
{
'README.md'
=>
''
})
}
let
(
:user
)
{
project
.
owner
}
let
(
:service
)
{
Ci
::
CreatePipelineService
.
new
(
project
,
user
,
ref:
pipeline_branch
)
}
let
(
:pipeline
)
{
service
.
execute!
(
:push
)
}
let
(
:build_names
)
{
pipeline
.
builds
.
pluck
(
:name
)
}
it
'creates a build and a test job'
do
expect
(
build_names
).
to
include
(
'build'
,
'test'
)
end
before
do
stub_application_setting
(
default_branch_name:
default_branch
)
stub_ci_pipeline_yaml_file
(
template
.
content
)
allow_any_instance_of
(
Ci
::
BuildScheduleWorker
).
to
receive
(
:perform
).
and_return
(
true
)
end
context
'when the project is set for deployment to AWS'
do
let
(
:platform_value
)
{
'ECS'
}
let
(
:review_prod_build_names
)
{
build_names
.
select
{
|
n
|
n
.
include?
(
'review'
)
||
n
.
include?
(
'production'
)}
}
shared_examples
'no Kubernetes deployment job'
do
it
'does not create any Kubernetes deployment-related builds'
do
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
(
'review'
)
expect
(
build_names
).
not_to
include
(
a_string_matching
(
/rollout \d+%/
))
end
end
before
do
create
(
:ci_variable
,
project:
project
,
key:
'AUTO_DEVOPS_PLATFORM_TARGET'
,
value:
platform_value
)
it
'creates a build and a test job'
do
expect
(
build_names
).
to
include
(
'build'
,
'test'
)
end
shared_examples
'no ECS job when AUTO_DEVOPS_PLATFORM_TARGET is not present'
do
|
job_name
|
context
'when AUTO_DEVOPS_PLATFORM_TARGET is nil'
do
let
(
:platform_value
)
{
nil
}
context
'when the project is set for deployment to AWS'
do
let
(
:platform_value
)
{
'ECS'
}
let
(
:review_prod_build_names
)
{
build_names
.
select
{
|
n
|
n
.
include?
(
'review'
)
||
n
.
include?
(
'production'
)}
}
it
'does not trigger the job'
do
expect
(
build_names
).
not_to
include
(
job_name
)
end
before
do
create
(
:ci_variable
,
project:
project
,
key:
'AUTO_DEVOPS_PLATFORM_TARGET'
,
value:
platform_value
)
end
context
'when AUTO_DEVOPS_PLATFORM_TARGET is empty'
do
let
(
:platform_value
)
{
''
}
shared_examples
'no ECS job when AUTO_DEVOPS_PLATFORM_TARGET is not present'
do
|
job_name
|
context
'when AUTO_DEVOPS_PLATFORM_TARGET is nil'
do
let
(
:platform_value
)
{
nil
}
it
'does not trigger the job'
do
expect
(
build_names
).
not_to
include
(
job_name
)
it
'does not trigger the job'
do
expect
(
build_names
).
not_to
include
(
job_name
)
end
end
end
end
it_behaves_like
'no Kubernetes deployment job'
context
'when AUTO_DEVOPS_PLATFORM_TARGET is empty'
do
let
(
:platform_value
)
{
''
}
it_behaves_like
'no ECS job when AUTO_DEVOPS_PLATFORM_TARGET is not present'
do
let
(
:job_name
)
{
'production_ecs'
}
end
it
'does not trigger the job'
do
expect
(
build_names
).
not_to
include
(
job_name
)
end
end
end
it
'creates an ECS deployment job for production only'
do
expect
(
review_prod_build_names
).
to
contain_exactly
(
'production_ecs'
)
end
it_behaves_like
'no Kubernetes deployment job'
context
'with FARGATE as a launch type'
do
let
(
:platform_value
)
{
'FARGATE'
}
it_behaves_like
'no ECS job when AUTO_DEVOPS_PLATFORM_TARGET is not present'
do
let
(
:job_name
)
{
'production_ecs'
}
end
it
'creates a
FARGATE
deployment job for production only'
do
expect
(
review_prod_build_names
).
to
contain_exactly
(
'production_
fargate
'
)
it
'creates a
n ECS
deployment job for production only'
do
expect
(
review_prod_build_names
).
to
contain_exactly
(
'production_
ecs
'
)
end
end
context
'and we are not on the default branch'
do
let
(
:platform_value
)
{
'ECS'
}
let
(
:pipeline_branch
)
{
'patch-1'
}
context
'with FARGATE as a launch type'
do
let
(
:platform_value
)
{
'FARGATE'
}
before
do
project
.
repository
.
create_branch
(
pipeline_branch
)
it
'creates a FARGATE deployment job for production only'
do
expect
(
review_prod_build_names
).
to
contain_exactly
(
'production_fargate'
)
end
end
%w(review_ecs review_fargate)
.
each
do
|
job
|
it_behaves_like
'no ECS job when AUTO_DEVOPS_PLATFORM_TARGET is not present'
do
let
(
:job_name
)
{
job
}
context
'and we are not on the default branch'
do
let
(
:platform_value
)
{
'ECS'
}
let
(
:pipeline_branch
)
{
'patch-1'
}
before
do
project
.
repository
.
create_branch
(
pipeline_branch
,
default_branch
)
end
end
it
'creates an ECS deployment job for review only'
do
expect
(
review_prod_build_names
).
to
contain_exactly
(
'review_ecs'
,
'stop_review_ecs'
)
end
%w(review_ecs review_fargate)
.
each
do
|
job
|
it_behaves_like
'no ECS job when AUTO_DEVOPS_PLATFORM_TARGET is not present'
do
let
(
:job_name
)
{
job
}
end
end
context
'with FARGATE as a launch type'
do
let
(
:platform_value
)
{
'FARGATE'
}
it
'creates an ECS deployment job for review only'
do
expect
(
review_prod_build_names
).
to
contain_exactly
(
'review_ecs'
,
'stop_review_ecs'
)
end
context
'with FARGATE as a launch type'
do
let
(
:platform_value
)
{
'FARGATE'
}
it
'creates an FARGATE deployment job for review only'
do
expect
(
review_prod_build_names
).
to
contain_exactly
(
'review_fargate'
,
'stop_review_fargate'
)
it
'creates an FARGATE deployment job for review only'
do
expect
(
review_prod_build_names
).
to
contain_exactly
(
'review_fargate'
,
'stop_review_fargate'
)
end
end
end
end
context
'and when the project has an active cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
,
projects:
[
project
])
}
context
'and 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
before
do
allow
(
cluster
).
to
receive
(
:active?
).
and_return
(
true
)
end
context
'on default branch'
do
it
'triggers the deployment to Kubernetes, not to ECS'
do
expect
(
build_names
).
not_to
include
(
'review'
)
expect
(
build_names
).
to
include
(
'production'
)
expect
(
build_names
).
not_to
include
(
'production_ecs'
)
expect
(
build_names
).
not_to
include
(
'review_ecs'
)
context
'on default branch'
do
it
'triggers the deployment to Kubernetes, not to ECS'
do
expect
(
build_names
).
not_to
include
(
'review'
)
expect
(
build_names
).
to
include
(
'production'
)
expect
(
build_names
).
not_to
include
(
'production_ecs'
)
expect
(
build_names
).
not_to
include
(
'review_ecs'
)
end
end
end
end
context
'when the platform target is EC2'
do
let
(
:platform_value
)
{
'EC2'
}
context
'when the platform target is EC2'
do
let
(
:platform_value
)
{
'EC2'
}
it
'contains the build_artifact job, not the build job'
do
expect
(
build_names
).
to
include
(
'build_artifact'
)
expect
(
build_names
).
not_to
include
(
'build'
)
it
'contains the build_artifact job, not the build job'
do
expect
(
build_names
).
to
include
(
'build_artifact'
)
expect
(
build_names
).
not_to
include
(
'build'
)
end
end
end
end
context
'when the project has no active cluster'
do
it
'only creates a build and a test stage'
do
expect
(
pipeline
.
stages_names
).
to
eq
(
%w(build test)
)
end
it_behaves_like
'no Kubernetes deployment job'
end
context
'when the project has no active cluster'
do
it
'only creates a build and a test stage'
do
expect
(
pipeline
.
stages_names
).
to
eq
(
%w(build test)
)
end
context
'when the project has an active cluster'
do
let!
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
,
projects:
[
project
])
}
describe
'deployment-related builds'
do
context
'on default branch'
do
it
'does not include rollout jobs besides production'
do
expect
(
build_names
).
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
(
'review'
)
expect
(
build_names
).
not_to
include
(
a_string_matching
(
/rollout \d+%/
))
end
it_behaves_like
'no Kubernetes deployment job'
end
context
'when STAGING_ENABLED=1'
do
before
do
create
(
:ci_variable
,
project:
project
,
key:
'STAGING_ENABLED'
,
value:
'1'
)
end
context
'when the project has an active cluster'
do
let!
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
,
projects:
[
project
])
}
it
'includes a staging job and a production_manual job'
do
expect
(
build_names
).
not_to
include
(
'production'
)
expect
(
build_names
).
to
include
(
'production_manual'
)
expect
(
build_names
).
to
include
(
'staging'
)
describe
'deployment-related builds'
do
context
'on default branch'
do
it
'does not include rollout jobs besides production'
do
expect
(
build_names
).
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
(
'review'
)
expect
(
build_names
).
not_to
include
(
a_string_matching
(
/rollout \d+%/
))
end
context
'when STAGING_ENABLED=1'
do
before
do
create
(
:ci_variable
,
project:
project
,
key:
'STAGING_ENABLED'
,
value:
'1'
)
end
it
'includes a staging job and a production_manual job'
do
expect
(
build_names
).
not_to
include
(
'production'
)
expect
(
build_names
).
to
include
(
'production_manual'
)
expect
(
build_names
).
to
include
(
'staging'
)
expect
(
build_names
).
not_to
include
(
'canary'
)
expect
(
build_names
).
not_to
include
(
'review'
)
expect
(
build_names
).
not_to
include
(
a_string_matching
(
/rollout \d+%/
))
end
end
context
'when CANARY_ENABLED=1'
do
before
do
create
(
:ci_variable
,
project:
project
,
key:
'CANARY_ENABLED'
,
value:
'1'
)
end
it
'includes a canary job and a production_manual job'
do
expect
(
build_names
).
not_to
include
(
'production'
)
expect
(
build_names
).
to
include
(
'production_manual'
)
expect
(
build_names
).
not_to
include
(
'staging'
)
expect
(
build_names
).
to
include
(
'canary'
)
expect
(
build_names
).
not_to
include
(
'review'
)
expect
(
build_names
).
not_to
include
(
a_string_matching
(
/rollout \d+%/
))
end
end
end
context
'when CANARY_ENABLED=1'
do
context
'outside of default branch'
do
let
(
:pipeline_branch
)
{
'patch-1'
}
before
do
create
(
:ci_variable
,
project:
project
,
key:
'CANARY_ENABLED'
,
value:
'1'
)
project
.
repository
.
create_branch
(
pipeline_branch
,
default_branch
)
end
it
'
includes a canary job and a production_manual job
'
do
it
'
does not include rollout jobs besides review
'
do
expect
(
build_names
).
not_to
include
(
'production'
)
expect
(
build_names
).
to
include
(
'production_manual'
)
expect
(
build_names
).
not_
to
include
(
'production_manual'
)
expect
(
build_names
).
not_to
include
(
'staging'
)
expect
(
build_names
).
to
include
(
'canary'
)
expect
(
build_names
).
not_
to
include
(
'review'
)
expect
(
build_names
).
not_
to
include
(
'canary'
)
expect
(
build_names
).
to
include
(
'review'
)
expect
(
build_names
).
not_to
include
(
a_string_matching
(
/rollout \d+%/
))
end
end
end
context
'outside of default branch'
do
let
(
:pipeline_branch
)
{
'patch-1'
}
before
do
project
.
repository
.
create_branch
(
pipeline_branch
)
end
it
'does not include rollout jobs besides review'
do
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
).
to
include
(
'review'
)
expect
(
build_names
).
not_to
include
(
a_string_matching
(
/rollout \d+%/
))
end
end
end
end
end
describe
'build-pack detection'
do
using
RSpec
::
Parameterized
::
TableSyntax
where
(
:case_name
,
:files
,
:variables
,
:include_build_names
,
:not_include_build_names
)
do
'No match'
|
{
'README.md'
=>
''
}
|
{}
|
%w()
|
%w(build test)
'Buildpack'
|
{
'README.md'
=>
''
}
|
{
'BUILDPACK_URL'
=>
'http://example.com'
}
|
%w(build test)
|
%w()
'Explicit set'
|
{
'README.md'
=>
''
}
|
{
'AUTO_DEVOPS_EXPLICITLY_ENABLED'
=>
'1'
}
|
%w(build test)
|
%w()
'Explicit unset'
|
{
'README.md'
=>
''
}
|
{
'AUTO_DEVOPS_EXPLICITLY_ENABLED'
=>
'0'
}
|
%w()
|
%w(build test)
'DOCKERFILE_PATH'
|
{
'README.md'
=>
''
}
|
{
'DOCKERFILE_PATH'
=>
'Docker.file'
}
|
%w(build test)
|
%w()
'Dockerfile'
|
{
'Dockerfile'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Clojure'
|
{
'project.clj'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Go modules'
|
{
'go.mod'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Go gb'
|
{
'src/gitlab.com/gopackage.go'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Gradle'
|
{
'gradlew'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Java'
|
{
'pom.xml'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Multi-buildpack'
|
{
'.buildpacks'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'NodeJS'
|
{
'package.json'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'PHP'
|
{
'composer.json'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Play'
|
{
'conf/application.conf'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Python'
|
{
'Pipfile'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Ruby'
|
{
'Gemfile'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Scala'
|
{
'build.sbt'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Static'
|
{
'.static'
=>
''
}
|
{}
|
%w(build test)
|
%w()
end
describe
'build-pack detection'
do
using
RSpec
::
Parameterized
::
TableSyntax
where
(
:case_name
,
:files
,
:variables
,
:include_build_names
,
:not_include_build_names
)
do
'No match'
|
{
'README.md'
=>
''
}
|
{}
|
%w()
|
%w(build test)
'Buildpack'
|
{
'README.md'
=>
''
}
|
{
'BUILDPACK_URL'
=>
'http://example.com'
}
|
%w(build test)
|
%w()
'Explicit set'
|
{
'README.md'
=>
''
}
|
{
'AUTO_DEVOPS_EXPLICITLY_ENABLED'
=>
'1'
}
|
%w(build test)
|
%w()
'Explicit unset'
|
{
'README.md'
=>
''
}
|
{
'AUTO_DEVOPS_EXPLICITLY_ENABLED'
=>
'0'
}
|
%w()
|
%w(build test)
'DOCKERFILE_PATH'
|
{
'README.md'
=>
''
}
|
{
'DOCKERFILE_PATH'
=>
'Docker.file'
}
|
%w(build test)
|
%w()
'Dockerfile'
|
{
'Dockerfile'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Clojure'
|
{
'project.clj'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Go modules'
|
{
'go.mod'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Go gb'
|
{
'src/gitlab.com/gopackage.go'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Gradle'
|
{
'gradlew'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Java'
|
{
'pom.xml'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Multi-buildpack'
|
{
'.buildpacks'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'NodeJS'
|
{
'package.json'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'PHP'
|
{
'composer.json'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Play'
|
{
'conf/application.conf'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Python'
|
{
'Pipfile'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Ruby'
|
{
'Gemfile'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Scala'
|
{
'build.sbt'
=>
''
}
|
{}
|
%w(build test)
|
%w()
'Static'
|
{
'.static'
=>
''
}
|
{}
|
%w(build test)
|
%w()
end
with_them
do
let
(
:project
)
{
create
(
:project
,
:custom_repo
,
files:
files
)
}
let
(
:user
)
{
project
.
owner
}
let
(
:service
)
{
Ci
::
CreatePipelineService
.
new
(
project
,
user
,
ref:
'master'
)
}
let
(
:pipeline
)
{
service
.
execute
(
:push
)
}
let
(
:build_names
)
{
pipeline
.
builds
.
pluck
(
:name
)
}
with_them
do
let
(
:project
)
{
create
(
:project
,
:custom_repo
,
files:
files
)
}
let
(
:user
)
{
project
.
owner
}
let
(
:service
)
{
Ci
::
CreatePipelineService
.
new
(
project
,
user
,
ref:
default_branch
)
}
let
(
:pipeline
)
{
service
.
execute
(
:push
)
}
let
(
:build_names
)
{
pipeline
.
builds
.
pluck
(
:name
)
}
before
do
stub_ci_pipeline_yaml_file
(
template
.
content
)
allow_any_instance_of
(
Ci
::
BuildScheduleWorker
).
to
receive
(
:perform
).
and_return
(
true
)
variables
.
each
do
|
(
key
,
value
)
|
create
(
:ci_variable
,
project:
project
,
key:
key
,
value:
value
)
before
do
stub_application_setting
(
default_branch_name:
default_branch
)
stub_ci_pipeline_yaml_file
(
template
.
content
)
allow_any_instance_of
(
Ci
::
BuildScheduleWorker
).
to
receive
(
:perform
).
and_return
(
true
)
variables
.
each
do
|
(
key
,
value
)
|
create
(
:ci_variable
,
project:
project
,
key:
key
,
value:
value
)
end
end
end
it
'creates a pipeline with the expected jobs'
do
expect
(
build_names
).
to
include
(
*
include_build_names
)
expect
(
build_names
).
not_to
include
(
*
not_include_build_names
)
it
'creates a pipeline with the expected jobs'
do
expect
(
build_names
).
to
include
(
*
include_build_names
)
expect
(
build_names
).
not_to
include
(
*
not_include_build_names
)
end
end
end
end
...
...
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