Spinnaker — это платформа для создание пайплайнов непрерывного деплоймента, позволяющая быстро и уверенно сообщать об изменениях. Данное ПО разрабатывала Netflix, потом начала поддерживать и Google. Служит для деплоя приложений в Kubernetes (k8s) автоматическим способом.
Архитектура выглядит следующим образом:
Компоненты Spinnaker-а:
- Deck: Один из микросервисов, который лужит веб UI интерфесом, для конйигурации Spinnaker через веб-браузер. Так же, просмотр приложений и проектов, пайплайнов.
- Gate: Один из микросервисов, который лужит API сервисом и пользовательский интерфейс Spinnaker, который взаимодействуют с сервером Spinnaker через этот API-шлюз, который называется Gate.
- Orca: Один из микросервисов, который служит для управления пайплайнами и другими специальными операциями через данный оркестровщик, называемый Orca.
- Clouddriver: Один из микросервисов, который служит для индексации и кэшировании развернутых ресурсов. Так же, взаимодействует с таким облачным провайдерам, как AWS, GCE и Azure.
- Echo: Один из микросервисов, который отвечает за отправку уведомлений, а также выступает в качестве входящего webhook-а.
- Igor: Один из микросервисов, используется для запуска конвейеров (pipelines) с помощью заданий непрерывной интеграции в таких системах, как Jenkins и Travis CI, и позволяет использовать Jenkins / Travis stag-ы в пайплайнах.
- Front50: Один из микросервисов, который служит хранилищем метаданных в Spinnaker. Он сохраняет метаданные для всех ресурсов, включая пайплайны, проекты, приложения и уведомления.
- Rosco: Один из микросервисов, который служит для создания (аббревиатура bakes в спиннакере) образов машин (AWS AMIs, Azure VM images, GCE images).
- Rush: Один из микросервисов, служит для выполнения скриптов.
Перейдем к установке.
Установка Spinnaker в Unix/Linux
Есть довольно много способов как установить спинакер на различные ОС. Приведу наглядные примеры как это можно сделать.
Способы установки Spinnaker в Unix/Linux:
- Использовать Minio (при использовании Minikube или Docker Desktop).
- Использовать AWS S3 (при использовании Minikube или Docker Desktop).
- Использовать харнилище от GCP (при использовании Minikube или Docker Desktop). Пока не будет примеров.
- Azure сторедж (при использовании Minikube или Docker Desktop).
- Redis (при использовании Minikube или Docker Desktop). Пока не будет примеров.
- Так же, можно будет установить Spinnaker используя AWS EKS. Пока не будет примеров.
- Можно будет установить Spinnaker используя GCP GKE. Пока не будет примеров.
Установка spinnaker используя Docker Desktop в Unix/Linux
У меня МакОС и я буду использовать Docker Desktop. У меня он уже установлен, по этому — начнем.
Способы установки описанные в данном пункте:
- Использовать Minio.
- Использовать AWS S3.
Потребуется настроить докер на использование следующих ресурсов:
- 4Gb Оперативной памяти. Я ипользую 9Гб.
- 2Gb swap (подкачки). Я ипользую 4Гб.
- 4 CPU ядер. Я ипользую 6 ядер.
Настраиваем и перезапускаем докер.
Устанавливаем Halyard:
# cd /usr/local/src && $ curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/macos/InstallHalyard.sh
Выполним установку:
$ sudo bash ./InstallHalyard.sh -y --user $USER
Проверим версию:
$ hal -v
1.21.1-20190624135101
Или, можно просмотреть список доступных версий:
$ hal version list
Чтобы использовать другую версию, выполните:
$ hal config version edit --version 1.12.13
Где:
- 1.12.13 — Это версия ПО.
Можно его установить с помощью Docker-а, но мне это не нужно было.
Выполним установку некоторых тулов:
$ brew install kubectl kubernetes-helm
PS: Если не установлен homebrew, установка тут.
Переключимся на нужный контекст:
$ kubectl config use-context docker-for-desktop
Разрешаем кубернетис:
$ helm init --wait
Проверяем, работает ли kubernetes провайдер:
$ hal config provider kubernetes enable
Установим контекст и имя аккаунта:
$ export CONTEXT=$(kubectl config current-context)
$ export ACCOUNT=my-k8s-v2-account
Добавляем аккаунт:
$ hal config provider kubernetes account add $ACCOUNT \
--provider-version v2 \
--context $CONTEXT
Выставляем конфиг-опции:
$ hal config features edit --artifacts true
Spinnaker развертывается в локальном кластере Kubernetes, причем каждый микросервис развертывается независимо. Halyard выполняем установку Spinnaker и его микросервисов, обеспечивая нулевое время простоя обновления.
Установим параметры ENV:
$ hal config deploy edit --type distributed --account-name $ACCOUNT
Далее, стоит выбрать сторедж который будет использоваться для хранения конфигурационный файлов, проектов, приложений. Выберете один из ниже предложенных, и выполните ряд действий который там описаны.
-=== Используем Minio ===-
Для Spinnaker требуется внешнее хранилище для сохранения настроек вашего приложения и настроенных пайплайнов — в качестве примера, развернем Minio S3 в отдельном Kubernetes контексте.
Minio — это S3-совместимое хранилище объектов, которое вы можете установить самостоятельно (селф-хостед).
Пробросим необходимые переменые:
$ export MINIO_ACCESS_KEY="VHK5D359RAXHEXAMPLE" && \
export MINIO_SECRET_KEY="vE8qPsiWjluG2mZRD1WHZANzSYW8X8C3BExAmPLe" && \
export MINIO_STORAGE_NAME="local-s3-storage"
Запускаем minio:
$ helm install \
--set persistence.size=8Gi \
--set accessKey=$MINIO_ACCESS_KEY,secretKey=$MINIO_SECRET_KEY \
--name $MINIO_STORAGE_NAME \
--namespace storage \
stable/minio
Запускаем следующую команду:
$ kubectl get pods --namespace=storage -w
Ждем пока не будет «READY 1/1»
Нам будет нужна еще одна переменная:
$ export POD_NAME=$(kubectl get pods --namespace storage -l "release=`echo ${MINIO_STORAGE_NAME}`" -o jsonpath="{.items[0].metadata.name}")
Далее, запускаем прокси в бэкграунде:
$ nohup kubectl port-forward $POD_NAME 9001:9000 --namespace storage &
PS: Можем открыть http://localhost:9001 чтобы зайти в S3 хранилище.
Определим ендпоинт который будем юзать:
$ export ENDPOINT="http://${MINIO_STORAGE_NAME}.storage.svc.cluster.local:9000"
Так же, стоит выбрать имя для деплоймента:
$ export DEPLOYMENT=default
Создадим проект:
$ mkdir -p ~/.hal/$DEPLOYMENT/profiles
Установим опцию игнорирования версий S3:
$ echo "spinnaker.s3.versioning: false" > \
~/.hal/$DEPLOYMENT/profiles/front50-local.yml
Конфигурируем S3 сторедж ендпоинт и креденшелы для Halyard:
$ echo $MINIO_SECRET_KEY | hal config storage s3 edit \
--endpoint $ENDPOINT \
--access-key-id $MINIO_ACCESS_KEY \
--secret-access-key # will be read on STDIN
Включаем созданный S3 сторедж:
$ hal config storage edit --type s3
Теперь, когда включили провайдер Kubernetes (Docker for Desktop), выбрали среду распределенного развертывания и настроили постоянное хранилище Minio S3, теперь необходимо выбрать версию Spinnaker, развернуть ее и подключиться к ней.
Выставляем версию для деплоймента Spinnaker:
$ export VERSION="1.14.7" && \
hal config version edit --version $VERSION
Выполняем деплоймент:
$ hal deploy apply
Для проверки состояний, можно использовать:
$ kubectl get pods --namespace=spinnaker -w
Выполняем форвардинг портов 9000 (Deck UI) и 8084 (Gate API service):
$ hal deploy connect
-=== Используем AWS S3 ===-
Выполним:
$ export AWS_ACCESS_KEY="AWS_ACCESS_KEY"
$ export AWS_SECRET_KEY="AWS_SECRET_KEY"
$ export AWS_REGION="eu-north-1"
$ export AWS_S3_STORAGE_NAME="AWS_S3_STORAGE_NAME"
$ export AWS_S3_ENDPOINT="https://${AWS_S3_STORAGE_NAME}.s3.amazonaws.com"
$ export DEPLOYMENT=default
$ mkdir -p ~/.hal/$DEPLOYMENT/profiles
$ echo "spinnaker.s3.versioning: false" > \
~/.hal/$DEPLOYMENT/profiles/front50-local.yml
$ echo $AWS_SECRET_KEY | hal config storage s3 edit \
--AWS_S3_ENDPOINT $AWS_S3_ENDPOINT \
--access-key-id $AWS_ACCESS_KEY \
--region $REGION \
--secret-access-key # will be read on STDIN
$ hal config storage edit --type s3
Вот и все.
Удаление созданного барахла
Для удаления всего созданного, нужно выполнить ряд следующих команд.
Для начала, удаляем все деплойменты от спинакера:
$ hal deploy clean
Выполним команду для проверки:
$ kubectl get pods --namespace=spinnaker -w
Удалим неймспейс:
$ kubectl delete namespace spinnaker
Завершаем работу прокси от minio:
$ kill $(ps -ef | grep port-forward | grep my-s3-storage | awk '{ print $2 }')
Удаляем minio:
$ kubectl delete deployment ${MINIO_STORAGE_NAME} --namespace storage
$ helm delete --purge ${MINIO_STORAGE_NAME}
Опять таки, можно выполнить команду для проверки:
$ kubectl get pods --namespace=storage -w
Удаляем неймспейс:
$ kubectl delete namespace storage
Еще, ели нужно удалить еще и Halyard, то выполняем:
$ kill $(ps -ef | grep com.netflix.spinnaker.halyard.Main | awk '{ print $2 }')
$ sudo ~/.hal/uninstall.sh
Удаление завершено.
Установка spinnaker используя Minikube в Unix/Linux
Устанавливаем Halyard:
# cd /usr/local/src && $ curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/macos/InstallHalyard.sh
Выполним установку:
$ sudo bash ./InstallHalyard.sh -y --user $USER
Я буду использовать minikube для работы с k8s:
$ minikube start --cpus 4 --memory 8192
Поглядим под-ы:
$ kubectl get nodes
Выбираем контекст:
$ kubectl config use-context minikube
Иницилиализируемся:
$ helm init --wait
Включаем куб:
$ hal config provider kubernetes enable
Пробрасываем переменные:
$ export MINIO_ACCESS_KEY=VHK5D359RAXHEXAMPLE && \
export MINIO_SECRET_KEY=vE8qPsiWjluG2mZRD1WHZANzSYW8X8C3BExAmPLe && \
export ACCOUNT=demo-account
В отдельном окне терминала, запускаем минио:
$ docker run -p 9000:9000 --name minio1 \
-e "MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}" \
-e "MINIO_SECRET_KEY=${MINIO_SECRET_KEY}" \
minio/minio server /data
ЗАМЕЧАНИЕ: можно еще добавить:
- -v /home/captain/minio/data:/data \
- -v /home/captain/minio/config:/root/.minio \
Но нужно их создать для начала (я за папки).
Добавляем минио к кубернетес:
$ echo ${MINIO_SECRET_KEY} | hal config storage s3 edit --endpoint http://localhost:9000 --access-key-id ${MINIO_ACCESS_KEY} --secret-access-key
+ Get current deployment
Success
+ Get persistent store
Success
Generated bucket name: spin-ec1fb70b-43b4-4a05-88ab-868e8950637a
+ Edit persistent store
Success
Problems in default.persistentStorage:
- WARNING Your deployment will most likely fail until you configure
and enable a persistent store.
+ Successfully edited persistent store "s3".
И потом, еще одну команду:
$ hal config storage edit --type s3
+ Get current deployment
Success
+ Get persistent storage settings
Success
+ Edit persistent storage settings
Success
+ Successfully edited persistent storage.
Для настройки Spinnaker kubernetes требуется как минимум Docker регистри. Добавляем регистри так:
hal config provider docker-registry account add dockerhub --address index.docker.io --repositories library/nginx
ЗАМЕЧАНИЕ: Можно использовать приватный докер регистри. Например, чтобы запустить локальный докер-регистри, можно выполнить:
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
Можете добавить приватный Docker регистр:
$ hal config provider docker-registry account add docker-private-repo --address https://localhost:5000 --username myuser --password mypassword
+ Get current deployment
Success
+ Add the docker-private-repo account
Success
Problems in default.provider.dockerRegistry.docker-private-repo:
- WARNING Your docker registry has no repositories specified, and
the registry's catalog is empty. Spinnaker will not be able to deploy any images
until some are pushed to this registry.
? Manually specify some repositories for this docker registry to
index.
+ Successfully added account docker-private-repo for provider
dockerRegistry.
Разрешаем докер-регистри:
$ hal config provider docker-registry enable
+ Get current deployment
Success
+ Edit the dockerRegistry provider
Success
Problems in default.provider.dockerRegistry.docker-private-repo:
- WARNING Your docker registry has no repositories specified, and
the registry's catalog is empty. Spinnaker will not be able to deploy any images
until some are pushed to this registry.
? Manually specify some repositories for this docker registry to
index.
+ Successfully enabled dockerRegistry
Добавляем аккаунт:
$ hal config provider kubernetes account add ${ACCOUNT} --kubeconfig-file=/Users/captain/.kube/config --docker-registries dockerhub --context $(kubectl config current-context)
+ Get current deployment
Success
+ Add the demo-account account
Success
+ Successfully added account demo-account for provider
kubernetes.
Установим параметры ENV:
$ hal config deploy edit --type=distributed --account-name ${ACCOUNT}
+ Get current deployment
Success
+ Get the deployment environment
Success
+ Edit the deployment environment
Success
+ Successfully updated your deployment environment.
Смотрим версии Spinnaker:
$ hal version list
+ Get current deployment
Success
+ Get Spinnaker version
Success
+ Get released versions
Success
+ You are on version "", and the following are available:
- 1.12.13 (Unbreakable):
Changelog: https://gist.github.com/spinnaker-release/89e02b2d04aff5b5cab69c3963cbb157
Published: Thu Jun 20 18:12:21 EEST 2019
(Requires Halyard >= 1.11)
- 1.13.10 (BirdBox):
Changelog: https://gist.github.com/spinnaker-release/3056119e8dd52f5d24041fdf0a42fe3e
Published: Thu Jun 20 18:31:31 EEST 2019
(Requires Halyard >= 1.17)
- 1.14.1 (LoveDeathAndRobots):
Changelog: https://gist.github.com/spinnaker-release/4b4bb42d4e3b6073fbd5f89fa7c3e060
Published: Fri May 24 18:17:14 EEST 2019
(Requires Halyard >= 1.17)
- 1.14.7 (LoveDeathAndRobots):
Changelog: https://gist.github.com/spinnaker-release/cf6b8a7290ba0d9277360e7a794e0b6b
Published: Mon Jun 24 17:03:24 EEST 2019
(Requires Halyard >= 1.17)
Выбираем нужную и применяем настройку:
$ hal config version edit --version 1.14.7
+ Get current deployment
Success
+ Edit Spinnaker version
Success
+ Spinnaker has been configured to update/install version "1.14.7".
Deploy this version of Spinnaker with `hal deploy apply`.
Деплоим:
$ hal deploy apply
Во время деплоймента, можно смотреть на создающиеся поды:
$ kubectl get pods --namespace spinnaker -w
NAME READY STATUS RESTARTS AGE
spin-clouddriver-bootstrap-v000-s2pnh 1/1 Running 0 105s
spin-clouddriver-v000-bs8gt 0/1 Running 0 26s
spin-deck-v000-hdwtg 1/1 Running 0 26s
spin-echo-v000-8qnfr 0/1 Running 0 26s
spin-front50-v000-7nxn6 0/1 Running 0 26s
spin-gate-v000-qgq9w 0/1 Running 0 26s
spin-igor-v000-bfpp4 0/1 Running 0 25s
spin-orca-bootstrap-v000-swvpr 1/1 Running 0 69s
spin-orca-v000-njqz2 0/1 Running 0 26s
spin-redis-bootstrap-v000-vkpx4 1/1 Running 0 110s
spin-redis-v000-rtbfj 1/1 Running 0 37s
spin-rosco-v000-lwrc2 0/1 Running 0 25s
Для запуска Spinnaker UI:
$ hal deploy connect
Если вы не хотите использовать hal для подключения, вы можете сделать переадресацию портов на модули Spinnaker:
alias spin_gate='kubectl port-forward -n spinnaker $(kubectl get pods -n spinnaker -o=custom-columns=NAME:.metadata.name | grep gate) 8084:8084'
alias spin_deck='kubectl port-forward -n spinnaker $(kubectl get pods -n spinnaker -o=custom-columns=NAME:.metadata.name | grep deck) 9001:9000'
alias spinnaker='spin_gate &; spin_deck &'
После чего, запускаем:
$ spinnaker
[1] 20836
[2] 20840
❯ Forwarding from 127.0.0.1:8084 -> 8084
Forwarding from [::1]:8084 -> 8084
Forwarding from 127.0.0.1:9001 -> 9000
Forwarding from [::1]:9001 -> 9000
Открываем http://localhost:9001
Готово!
Установка spinnaker используя Docker и Docker-Compose в Unix/Linux
Копируем код:
$ git clone https://github.com/spinnaker/spinnaker.git
Заходим в папку:
$ cd spinnaker/experimental/docker-compose/
Для удобства использования, я создам новую докер-машину:
$ docker-machine create spinnaker
Далее, выполняем:
$ export DOCKER_IP=$(docker-machine ip spinnaker) && \
docker-compose up -d
После деплоймента, можно выполнить:
$ open http://$(docker-machine ip spinnaker):9000
Честно говоря, у меня не вышло запустить сервис данным образом. Я оставил данное действие в качестве примера. Данный запуск, находится в эксперементальном режиме, они еще его тестируют и отлаживают.
Установка spinnaker используя Kubernetes и Helm в Unix/Linux
Устанавливаем kubernetes (Docker for Desktop или Minikube, AWS EKS, GCP GKE etc).
Для данного примера, я возьму Docker for Desktop. Выполнил настройку как в примере выше.
Устанавливаем HELM:
Затем, скачиваем чарт:
$ curl -Lo values.yaml https://raw.githubusercontent.com/kubernetes/charts/master/stable/spinnaker/values.yaml
Отредактируйте values.yaml, чтобы вставить учетные данные Docker Hub под учетной записью dockerhub. Добавьте репо, который вы открыли из моей учетной записи Github, в список репозиториев, например:
.........
dockerRegistries:
- name: dockerhub
address: index.docker.io
username: YOUR_USERNAME_HERE
password: YOUR_PASSWORD_HERE
repositories:
- library/alpine
- library/ubuntu
- library/centos
- library/nginx
.........
Где:
- YOUR_USERNAME_HERE — Пользователь от докер Хаба
- YOUR_PASSWORD_HERE — Пароль от пользователя от докер Хаба
У меня была ошибка с minio ПОД-ом, исправлением служило замена тега для образа minio, блок выглядит так:
.....
minio:
enabled: true
imageTag: latest
serviceType: ClusterIP
accessKey: spinnakeradmin
secretKey: spinnakeradmin
bucket: "spinnaker"
pullPolicy: IfNotPresent
nodeSelector: {}
.......
Теперь запустите Spinnaker с обновленной конфигурацией:
$ helm install -n kubelive stable/spinnaker -f values.yaml --timeout 300 --version 0.3.5 --namespace spinnaker
Откройте порт Spinnaker для хоста с помощью следующих команд:
$ export DECK_POD=$(kubectl get pods --namespace spinnaker -l "component=deck,app=kubelive-spinnaker" -o jsonpath="{.items[0].metadata.name}") && \
kubectl port-forward --namespace spinnaker $DECK_POD 9000
После этого, можно открыть Spinnaker из браузера, посетив http://localhost:9000
Как-то так.
Установка spinnaker используя AWS EKS в Unix/Linux
Пока не пробовал. Оставлю так, после дополню.
Установка spinnaker используя GCP GKE в Unix/Linux
Пока не пробовал. Оставлю так, после дополню.
Настройка/Использование Spinnaker в Unix/Linux
И так, настройка прошла успешно. Открыли Spinnaker на http://localhost:9000. Домашняя станица Spinnaker-а выглядит следующим образом:
В поле поиска, можно поискать проекты, кластера, ЛБ, секьюрити группы и тд и тп. Например:
Приступим к использованию!
Создание Spinnaker пайплайна
Начну создание приложения под названием MyTestApp:
Нажимаем на кнопку «Create». Созданное приложение выглядит так:
Идем далее, создаем лоад баллансер, для этого клацаем по «Load Balancers» -> «Create Load Balancer»:
Во вкладке с «BASIC SETTINGS», заполняем:
- Account -> local.
- Namespace -> default.
- Stack -> prod.
Далее, во вкладке с «PORTS»:
В данной вкладке стоит прописать:
- Target Port -> 80.
Далее, во вкладке с «ADVANCED SETTINGS»:
В данной вкладке, прописываем:
- Type -> NodePort.
Нажимаем на «Create». Аналогичными действиями, создаем ЛБ с названием «dev», но только в последней вкладке стоит выбрать «ClusterIP»:
После чего, должно выти что-то типа следующего:
ЛБы готовы и теперь можно создавать pipeline, переходим в данную вкладку и нажимаем на «Create»:
Заполняем:
- Pipeline Name -> DeployToProd
Нажимаем на «Create»:
Жмакаем на «Save Changes». Прокручиваем стрцницу вверх и кликаем на «Add stage»:
Заполняем:
- Stage name -> Deploy
Затем кликаем по «Add server group»:
Я выбрал:
- Copy configuration from -> None. Т.к у меня нет подходящих шаблонов для этого деплоймента.
Нажимаем на «Continue without a template»:
Нажимаем на вкладку «LOAD BALANCERS» и выбираем нужный (в данном случае — mytestapp-prod):
Переходим во «CONTAINER» вкладку и заполняем:
В данной вкладке, стоит открыть «Probes» и добавляем использование Readiness Probe и Liveness Probe:
И так, нажимаем на «Add» чтобы добавить наши ченджи. И потом, кликаем по «Save Changes».
Т.к я деплою nginx, а не приложение с кодом (так бы сработал триггер по коммиту), то запущу «Start manual execution»:
Выбераем параметры:
Нажимаем на «Run».
Получаем сервисы:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 178m
mytestapp-dev ClusterIP 10.105.171.103 <none> 80/TCP 47m
mytestapp-prod NodePort 10.109.30.179 <none> 80:30294/TCP 57m
Чтобы проверить, работает ли деплоймент, пробросим прокси куба:
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
ЗАМЕЧАНИЕ: для того чтобы прокси работал в бэкграунде, выполняем:
$ kubectl proxy &
Т.к я деплоил mytestapp-prod приложение, а оно находится на http://127.0.0.1:30294/ то кликаем по нему и попадаем собственно на задеплоенный nginx!
Стоит выполнить ряд действий для dev стейджа. Клацаем «Pipelines» -> «Create». Название выбираем название «DeployToDev»:
После чего. Нажимаем на «Save Changes». И кликаем «Add Stage»:
Заполняем:
- Type -> Deploy.
- Stage Name -> Deploy.
В поле «Add server group», выбераем «mytestapp-prod-v000»:
Выбираем из списка и нажимаем на «Use this template». Он скопирует темплейт в новый. Немного поправим его:
Далее, в поле «Load Balancers»:
Заменили и идем в «Container»:
Во вкладке «Probes», включаем Readiness Probe и Liveness Probe (как в примерах выше). После всех настроек, клацаем на «Add» -> «Save Changes».
Вернусь в главное меню апликейшина и нажму на только созданный пайплайн:
Скачаем дашборды для куба:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
Смотрим токены:
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Открываем — http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
С помощью данных бордов можно смотреть инфу.
В завершении, содаем новый пайплайн с названием PromoteToProd:
Жмакаем на «Create». И заполняем поля:
Нажимаем на «Save Changes». После чего, открываем «Add Stage»:
Заполняем и клацаем на «Save Changes». Клацаем на «Add stage» для создания деплоя на ПРОД:
Клацаем на «Add server group» и выбераем «Copy configuration from», а имеено с «None» и кликаем на «Continue without any templates». Заполняем:
Кликаем на «Add» -> «Save Changes».
Нажимаем на билды. Перекидываем с dev -> prod:
Проверяем через ИП деплой! Все должно работать.
Вот и все, статья «Установка Spinnaker в Unix/Linux» завершена.