Merge branch 'adam-auto-deploy' into 'master'
Auto deploy Closes #23580 See merge request !8135
This commit is contained in:
commit
68d89aa96b
11 changed files with 199 additions and 5 deletions
|
@ -188,7 +188,7 @@ module BlobHelper
|
|||
end
|
||||
|
||||
def gitlab_ci_ymls
|
||||
@gitlab_ci_ymls ||= Gitlab::Template::GitlabCiYmlTemplate.dropdown_names
|
||||
@gitlab_ci_ymls ||= Gitlab::Template::GitlabCiYmlTemplate.dropdown_names(params[:context])
|
||||
end
|
||||
|
||||
def dockerfile_names
|
||||
|
|
|
@ -280,13 +280,15 @@ module ProjectsHelper
|
|||
end
|
||||
end
|
||||
|
||||
def add_special_file_path(project, file_name:, commit_message: nil)
|
||||
def add_special_file_path(project, file_name:, commit_message: nil, target_branch: nil, context: nil)
|
||||
namespace_project_new_blob_path(
|
||||
project.namespace,
|
||||
project,
|
||||
project.default_branch || 'master',
|
||||
file_name: file_name,
|
||||
commit_message: commit_message || "Add #{file_name.downcase}"
|
||||
commit_message: commit_message || "Add #{file_name.downcase}",
|
||||
target_branch: target_branch,
|
||||
context: context
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -68,6 +68,10 @@
|
|||
- if koding_enabled? && @repository.koding_yml.blank?
|
||||
%li.missing
|
||||
= link_to 'Set up Koding', add_koding_stack_path(@project)
|
||||
- if @repository.gitlab_ci_yml.blank? && @project.deployment_service.present?
|
||||
%li.missing
|
||||
= link_to add_special_file_path(@project, file_name: '.gitlab-ci.yml', commit_message: 'Set up autodeploy', target_branch: 'autodeploy', context: 'autodeploy') do
|
||||
Set up autodeploy
|
||||
|
||||
- if @repository.commit
|
||||
.project-last-commit{ class: container_class }
|
||||
|
|
4
changelogs/unreleased/adam-auto-deploy.yml
Normal file
4
changelogs/unreleased/adam-auto-deploy.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Introduce "Set up autodeploy" button to help configure GitLab CI for deployment
|
||||
merge_request: 8135
|
||||
author:
|
|
@ -23,6 +23,7 @@
|
|||
- [CI/CD pipelines settings](../user/project/pipelines/settings.md)
|
||||
- [Review Apps](review_apps/index.md)
|
||||
- [Git submodules](git_submodules.md) Using Git submodules in your CI jobs
|
||||
- [Autodeploy](autodeploy/index.md)
|
||||
|
||||
## Breaking changes
|
||||
|
||||
|
|
BIN
doc/ci/autodeploy/img/autodeploy_button.png
Normal file
BIN
doc/ci/autodeploy/img/autodeploy_button.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
BIN
doc/ci/autodeploy/img/autodeploy_dropdown.png
Normal file
BIN
doc/ci/autodeploy/img/autodeploy_dropdown.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
39
doc/ci/autodeploy/index.md
Normal file
39
doc/ci/autodeploy/index.md
Normal file
|
@ -0,0 +1,39 @@
|
|||
# Autodeploy
|
||||
|
||||
> [Introduced][mr-8135] in GitLab 8.15.
|
||||
|
||||
Autodeploy is an easy way to configure GitLab CI for the deployment of your
|
||||
application. GitLab Community maintains a list of `.gitlab-ci.yml`
|
||||
templates for various infrastructure providers and deployment scripts
|
||||
powering them. These scripts are responsible for packaging your application,
|
||||
setting up the infrastructure and spinning up necessary services (for
|
||||
example a database).
|
||||
|
||||
You can use [project services][project-services] to store credentials to
|
||||
your infrastructure provider and they will be available during the
|
||||
deployment.
|
||||
|
||||
## Supported templates
|
||||
|
||||
The list of supported autodeploy templates is available [here][autodeploy-templates].
|
||||
|
||||
## Configuration
|
||||
|
||||
1. Enable a deployment [project service][project-services] to store your
|
||||
credentials. For example, if you want to deploy to a Kubernetes cluster
|
||||
you have to enable [Kubernetes service][kubernetes-service].
|
||||
1. Configure GitLab Runner to use [docker-in-docker executor][docker-in-docker].
|
||||
1. Navigate to the "Project" tab and click "Set up autodeploy" button.
|
||||
![Autodeploy button](img/autodeploy_button.png)
|
||||
1. Select a template.
|
||||
![Dropdown with autodeploy templates](img/autodeploy_dropdown.png)
|
||||
1. Commit your changes and create a merge request.
|
||||
1. Test your deployment configuration using a [Review App][review-app] that was
|
||||
created automatically for you.
|
||||
|
||||
[mr-8135]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8135
|
||||
[project-services]: ../../project_services/project_services.md
|
||||
[autodeploy-templates]: https://gitlab.com/gitlab-org/gitlab-ci-yml/tree/master/autodeploy
|
||||
[kubernetes-service]: ../../project_services/kubernetes.md
|
||||
[docker-in-docker]: ../docker/using_docker_build.md#use-docker-in-docker-executor
|
||||
[review-app]: ../review_apps/index.md
|
|
@ -13,8 +13,9 @@ module Gitlab
|
|||
|
||||
def categories
|
||||
{
|
||||
"General" => '',
|
||||
"Pages" => 'Pages'
|
||||
'General' => '',
|
||||
'Pages' => 'Pages',
|
||||
'Autodeploy' => 'autodeploy'
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -25,6 +26,11 @@ module Gitlab
|
|||
def finder(project = nil)
|
||||
Gitlab::Template::Finders::GlobalTemplateFinder.new(self.base_dir, self.extension, self.categories)
|
||||
end
|
||||
|
||||
def dropdown_names(context)
|
||||
categories = context == 'autodeploy' ? ['Autodeploy'] : ['General', 'Pages']
|
||||
super().slice(*categories)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
64
spec/features/auto_deploy_spec.rb
Normal file
64
spec/features/auto_deploy_spec.rb
Normal file
|
@ -0,0 +1,64 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'Auto deploy' do
|
||||
include WaitForAjax
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:project) { create(:project) }
|
||||
|
||||
before do
|
||||
project.create_kubernetes_service(
|
||||
active: true,
|
||||
properties: {
|
||||
namespace: project.path,
|
||||
api_url: 'https://kubernetes.example.com',
|
||||
token: 'a' * 40,
|
||||
}
|
||||
)
|
||||
project.team << [user, :master]
|
||||
login_as user
|
||||
end
|
||||
|
||||
context 'when no deployment service is active' do
|
||||
before do
|
||||
project.kubernetes_service.update!(active: false)
|
||||
end
|
||||
|
||||
it 'does not show a button to set up auto deploy' do
|
||||
visit namespace_project_path(project.namespace, project)
|
||||
expect(page).to have_no_content('Set up autodeploy')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when a deployment service is active' do
|
||||
before do
|
||||
project.kubernetes_service.update!(active: true)
|
||||
visit namespace_project_path(project.namespace, project)
|
||||
end
|
||||
|
||||
it 'shows a button to set up auto deploy' do
|
||||
expect(page).to have_link('Set up autodeploy')
|
||||
end
|
||||
|
||||
it 'includes Kubernetes as an available template', js: true do
|
||||
click_link 'Set up autodeploy'
|
||||
click_button 'Choose a GitLab CI Yaml template'
|
||||
|
||||
within '.gitlab-ci-yml-selector' do
|
||||
expect(page).to have_content('OpenShift')
|
||||
end
|
||||
end
|
||||
|
||||
it 'creates a merge request using "autodeploy" branch', js: true do
|
||||
click_link 'Set up autodeploy'
|
||||
click_button 'Choose a GitLab CI Yaml template'
|
||||
within '.gitlab-ci-yml-selector' do
|
||||
click_on 'OpenShift'
|
||||
end
|
||||
wait_for_ajax
|
||||
click_button 'Commit Changes'
|
||||
|
||||
expect(page).to have_content('New Merge Request From autodeploy into master')
|
||||
end
|
||||
end
|
||||
end
|
74
vendor/gitlab-ci-yml/autodeploy/OpenShift.gitlab-ci.yml
vendored
Normal file
74
vendor/gitlab-ci-yml/autodeploy/OpenShift.gitlab-ci.yml
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
image: registry.gitlab.com/gitlab-examples/openshift-deploy
|
||||
|
||||
variables:
|
||||
# Application deployment domain
|
||||
KUBE_DOMAIN: domain.example.com
|
||||
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
- review
|
||||
- staging
|
||||
- production
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- command build
|
||||
only:
|
||||
- branches
|
||||
|
||||
production:
|
||||
stage: production
|
||||
variables:
|
||||
CI_ENVIRONMENT_URL: http://production.$KUBE_DOMAIN
|
||||
script:
|
||||
- command deploy
|
||||
environment:
|
||||
name: production
|
||||
url: http://production.$KUBE_DOMAIN
|
||||
when: manual
|
||||
only:
|
||||
- master
|
||||
|
||||
staging:
|
||||
stage: staging
|
||||
variables:
|
||||
CI_ENVIRONMENT_URL: http://staging.$KUBE_DOMAIN
|
||||
script:
|
||||
- command deploy
|
||||
environment:
|
||||
name: staging
|
||||
url: http://staging.$KUBE_DOMAIN
|
||||
only:
|
||||
- master
|
||||
|
||||
review:
|
||||
stage: review
|
||||
variables:
|
||||
CI_ENVIRONMENT_URL: http://$CI_ENVIRONMENT_SLUG.$KUBE_DOMAIN
|
||||
script:
|
||||
- command deploy
|
||||
environment:
|
||||
name: review/$CI_BUILD_REF_NAME
|
||||
url: http://$CI_ENVIRONMENT_SLUG.$KUBE_DOMAIN
|
||||
on_stop: stop_review
|
||||
only:
|
||||
- branches
|
||||
except:
|
||||
- master
|
||||
|
||||
stop_review:
|
||||
stage: review
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
script:
|
||||
- command destroy
|
||||
environment:
|
||||
name: review/$CI_BUILD_REF_NAME
|
||||
action: stop
|
||||
when: manual
|
||||
only:
|
||||
- branches
|
||||
except:
|
||||
- master
|
Loading…
Reference in a new issue