Если вы знакомы с Docker , Terraform и самые популярные платформы CI (например, Circleci, Codeship), вы уже знаете силу, стоящую за Декларативные DevOps Анкет Эти технологии скрывают невероятное количество повторного использования и детализации, поддерживая простой структурированный синтаксис в простом в создании и чтении YAML. Нужна изображение Ubuntu? Готово. Как насчет экземпляра MongoDB? Ты понял. Нужно сделать что -то совершенно обычное? Получил за это.
Автоматизация заставляет DevOps уходить
Я предлагаю быстро прочитать статью BMC под названием Автоматизировать инициативы Cloud & DevOps на всех этапах Анкет Если автоматизация является оркестровкой DevOps, декларативные DevOps — это ноты. Он обеспечивает читаемый формат, чтобы разыграть намерение композитора. Важно отметить, что это упрощает кривую обучения использования многих традиционных инструментов в цепочке. Конечно, требуется время, чтобы настроить все отдельные и разрозненные части, но как только это будет сделано, он напевает довольно непрерывно. Это служит потребностям проекта. Моя платформа CI организует вещи и имеет свой собственный декларативный синтаксис и требования. В рамках этого я могу делать пользовательские вещи, чтобы создать и проверить свой проект, а затем вызовать свои декларативные требования как на Docker, так и Terraform.
Тем не менее, от проекта до проекта, ничто не совсем то же самое. Например, терраформ изменяется из -за облачного поставщика, изменений CI из -за выбора технического стека, а также изменения Docker также. Различные URL -адреса и учетные данные безопасности для подключения к определенным вещам, необязательное использование репозитория артефакта (например, Jfrog или Сонатип ) Список можно продолжать с отличным # перестановки.
Недостаток проекта DevOps
Опять же, декларативные DevOps, чтобы облегчить жизнь. Повторяемый, предсказуемый и быстрый. Попробуй что -нибудь. Не нравится? Сделайте быстрые изменения и попробуйте еще раз. Теперь это жизненно важная часть моего процесса разработки. Я не заинтересован в возвращении к тому, как все было раньше.
Но я не могу наслаждаться самыми полными преимуществами DevOps и автоматизации без проекта. Это как фабрика, ожидающая получения сырья, необходимого для того, чтобы он был фактически фабрикой. Я определяю проект как «значимую кодовую базу» вместе со всеми лесами, необходимыми для того, чтобы сделать машины на заводе, пройдя хотя бы один раз. Многие платформы IDES и CI создают простое приложение «Hello World», специфичное для технического стека, и некоторые заглушенные/пустые файлы, чтобы получить мяч. Забудьте начать с полностью функционирующего приложения. Не готово к работе Dockerfile, Ci Yaml или файл Terraform. Эти платформы просто недостаточно знают о требованиях к проектам для создания значимого проекта.
Прежде чем начать проект, и руки перейдут на клавиатуру, есть довольно много вещей, которые я уже знаю. У меня в основном »есть мои бизнес -требования (они никогда не меняются, они …). Я знаю технический стек, который мне нужно использовать. Я направлен на использование платформы CI ABC и поставщика облаков XYZ. Наконец, мне нужен изображение Docker, организованное на удаленном кластере Kubernetes.
Если я смогу описать требования проекта, я хотел бы объявить эти требования.
Автоматизация автоматизации
У нас есть Контейнер как код с докером, Оркестровка-как код с Kubernetes, Инфраструктура-как код с Terraform и Трубопровод как код со многими платформами CI. Так почему бы не проект-код?
Один файл YAML, который превращает объявления проекта в бизнес -контекстуальный технологический стек -специфический исходный код вместе с файлами конфигурации Ci/Container/Orchestration. Это глоток, но стоит задуматься. Наливая бизнес -контекст, это больше не означает «привет мир». Вместо этого начните с развертываемого приложения с (вероятно) от 10 до 100 с 1000 линий вещей, которые мне нужны, и, честно говоря, больше не хочу писать, пока я могу редактировать по мере необходимости.
Пример проекта-как код Yaml
app:
techstack:
id: Angular7MongoDB # options: ASPNETCore, LambdaNoSQL, Lambda, Angular7MongoDB, Django, GoogleFunctions
# SparkMicroWeb, SpringCore, SpringMongoDB, Struts2, Apollo
# To see the list of available tech stacks on a realMethods instance using command:
# realmethods_cli stack_list --output pretty
model:
identifier: shopping-cart.sql # options: Unique id of an existing model or
# full or relative path to a model file of a supported type
# model types: UML, Eclipse Modeling Framework, JSON, SQL Script, JAR, EAR
# To see the list of available model on a realMethods instance using command:
# realmethods_cli model_list --output pretty
#
#
# DevOps Project Creation Options
#
options:
#
# CI/CD parameters
#
cicd:
platform: circleci # options: codeship, circleci,
# jenkins, azure, aws, gitlab,
# bitbucket, buddy, semaphore
AES key: # codeship project key; ex: XKyy2IDcSptIIvMY8KLMVMcxVs+ZK6AyNu1B4Wu1DPY=
#
# Application parameters
#
application:
name: angular7demo
description: Demo Angular7 application generated by realMethods
author: Dev Team
email: xxxx.xxxxxxxxx@xxxxxxxx.com
application logo URL: ./img/turnstone.biologics.png
company name: Turnstone Biologics
version: 0.0.1
#
# Docker parameters
#
docker:
userName: your_docker_user_name
password: your_docker_password
orgName: your_dockerorg_name
repo: your_repository
tag: latest
#
# Git repository parameters
#
git:
name: GitAngularSetting # an arbitrary name
username: your_git_user_name
password: your_git_password:
repository: your_git_repo_name
tag: latest
host: bitbucket.org
#
# HashiCorp Terraform parameters
#
terraform:
inUse: true
provider: aws # options: aws, google, azure, nutanix
region: us-east-1 # options: any cloud provider region
ssh-fingerprint: xxxxxxxxxxxxxxxxx # required by CircleCI for SSH
#
# AWS parameters
#
aws:
key-pair-name: xxxxxxxxxxxx
vpc: xxxxxxxxxxxxx
ec2-instance-type: t2.medium # options: any AWS instance type
access-key: ASSIGN__ON_CICD_PLATFORM_AS_ENV_VARS
secret-key: ASSIGN__ON_CICD_PLATFORM_AS_ENV_VARS
#
# Nutanix parameters
#
nutanix:
inUse: false
userName: xxxxxxxxxxxxxxxxxxxxxxxxx
password: xxxxxxxxxxxxxx
endpoint: xxx.xxx.xxx.xxx
insecure: true
port: xxxxx
clusterId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
email: dev@realmethods.com
vmUserName: xxxxxxxxxxx
vmPassword: xxxxxxxxxxx
vmHost: xxx.xxx.xxx.3xxx
vmOS: linux # options linux, windows - windows not yet supported
#
# Kubernetes parameters: If not in use, and Terraform
# is in use, physical infrastructure
# will be provisioned on the provider
#
kubernetes:
inUse: true
host: https://xxx.xxx.xxx.xxx
project: xxxxxxxxxxx # assigned project name
region: us-central1-a # options: any provider region
hostTarget: google # option: google, aws, azure, nutanix
username: admin
password: 5UhfcIPAPsiPXklT # generic value
exposeAsService: true
serviceType: LoadBalancer # options: LoadBalancer, NodePort, ClusterIP
useSessionAffinity: true
#
# Artifact repository for build dependencies and binaries
#
artifact-repo:
inUse: false
type: nexus # options: nexus, jfrog
userName: xxxxxxx
password: xxxxxxxx
email: xxxx.xxxxxx@xxxxxxx.com
repoUrl: http://xxx.xxx.xxx.xxx:8081/repository/npm-public
#
# MongoDB parameters - defaults to a local accessible instance
#
# If Terraform is in use, will attempt to instantiate a MongoDB instance via Docker image,
# and use the instance IP address when binding the lambda functions
#
mongodb:
server address: localhost:27017
database name: angular7demo
search size: 10
default collection name: default_collection
auto-increment id name: _id
auto-increment seq name: seq
mongooseHost: http://localhost
mongoosePort: 4000
Вывод
Project-AS-код перемещает начальную линию проекта и общий график в. Это дает (новую) цель Sprint Zero Анкет Предварительная работа, необходимая для того, чтобы его настройка (часто меньше дня) приносит огромные дивиденды за недели сбережений времени первым значимым коммитию проекта. У каждого проекта есть определенные вещи, над которыми нужно работать, чем другие. Я предпочитаю автоматизировать обыденное и предсказуемое (хотя и очень необходимо) сосредоточиться на более важном DEV. Вы можете просмотреть образец сгенерированного проекта Здесь Чтобы получить представление о том, что возможно из одного Project-AS-код YAML File Анкет
Оригинал: «https://dev.to/complexmathguy/project-as-code-furthering-declarative-devops-1i83»