Если вы знакомы с 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»