Рубрики
Uncategorized

Проект как код: Продолжая декларативные DevOps

Если вы знакомы с Docker, Terraform и самыми популярными платформами CI (например, Circleci, Codeship … Tagged с Declarative, ProjectAscode, Automation, DevOps.

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