Промышленное приложение

это не только приложение


Кирпиченков Денис / dkirpichenkov@naumen.ru

d0k1.github.io/JavaDevOpsTalk/

План

  • Git
  • Maven
  • Jenkins
  • Github
  • Openshift
  • Все сразу

Version Control Systems

git

Version Control Systems

  • Репозитарий
  • Коммит
  • Версия/Состояние/Ревизия

Version Control Systems

  • Чтобы видеть историю изменений
  • Чтобы переключаться между состояниями кода
  • Удобно вести совместную работу
  • Увидеть автора и дату создания версии

Два типа VCS

  • Централизованные VCS: cvs / svn / etc
  • Распределенные VSC: Mercurial, BitKeeper, Bazaar, Git

Централизованные VCS

Достоинства

  • Всё хранится на сервере
  • Централизованная блокировка изменений

Недостатки

  • Невозможно работать без доступа к серверу
  • Один сервер - уникальная точка отказа

Распределенные VCS

Достоинства

  • Практически невозможно потерять репозиторий
  • Работа с версиями не зависит от доступности сервера

Недостатки

  • Невозможны централизованные блокировки файлов

Git: появление

  • Распределенная комманда разработки
  • Необходимость версионировать и просматривать каждое изменение
  • BitKeeper

git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git

Ветки / branch

Ветки / branch

Git: cheat sheet

  • git clone ${url}
  • git checkout ${branchName}
  • Do work
  • git add .
  • git commit -m ${MessageAboutCommit}
  • git push origin ${branchName}

Система сборки

Maven

Нет системы сборки


class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
                        

$ javac HelloWorld.java
$ java HelloWorld
                        

Больше кода


class HelloWorld {
    public static void main(String[] args) {
        Printer.print("Hello World!");
    }
}

class Printer {
    public static void print(String text) {
        System.out.println(text);
    }
}
                        

$ javac Printer.java HelloWorld.java
$ java HelloWorld
                        

Система сборки. Требования

  • Сборка вне IDE
  • Запуск тестов
  • Особая структура файлов
  • Зависимости
  • Upload

Системы сборки для Java

  • Ant
  • Maven
  • Gradle

Maven

Одна из самых популярных систем сборки
https://maven.apache.org

  • описание проекта в файле pom.xml
  • сделан для сборки в Java
  • всегда один выход: Jar, war, ear...
  • много plugin-ов
  • у цикла жизни много фаз

Работа Maven

Структура проекта

Maven артефакт

  • groupId ru.naumen
  • artifactId cti
  • version 4.8.0
  • scope compile
  • excludes

Структура pom.xml



    ru.urfu.matmex
    simple
    jar
    1.0
    Simple Project
...

                        

Зависимости



     1.8.3 
    
        
            junit
            junit
            4.12
            test
        
        
            commons-beanutils
            beanutils
            ${beanutils.version}
            
                
                    commons-logging
                    commons-logging
                
            
        
     
    ...

                        

Объявление переменных



     1.8.3 
    ...

                        

Зависимость



    
            
                junit
                junit
                4.12
                test
            
    

                        

Транзитивные зависимости




        ...
        
            commons-beanutils
            beanutils
            ${beanutils.version}
            
                
                    commons-logging
                    commons-logging
                
            
        
     
... 

                    

Scope зависимостей

  • compile
  • test
  • provided
  • runtime
  • system

Система непрерывной интеграции

Jenkins

Система непрерывной интеграции

  • Рутина
  • Плохой код в репозитарии
  • Проблемы окружения
  • История сборок
  • Много-много тестов

Рутина


mvn clean install
cp target/artifact.war ../tomcat/webapps
../tomcat/bin/startup.sh
mvn test
                    

Плохой код

"Плохой" разработчик "Хороший" разработчик

# завтра в отпуск
git checkout master
# Надо срочно доделать задачу
git commit -am 'Killer feature'
git push origin master
# Наконец то отпуск
                                

git checkout master
git pull
mvn clean install
...
BUILD FAILED
                                

Проблемы окружения

Windows 95 OSR2 MacPro late 2017

История сборок

Много тестов

8.5kilo тестов, 24 дочерних узла

Цикл разработки

CI Jenkins

  • Быстро находит ошибки
  • Тестируем весь код
  • Наличие стабильной версии кода
  • Повышение качества

Jenkins. Общий вид

Наш цикл интеграции

  • Триггер (расписание, git)
  • Сборка
  • Статический анализ
  • Unit тестирование
  • Присвоение версии
  • Функциональные тесты
  • Сохранение
  • Отчет

Github

Весь код интернета

Аналоги

  • Google code
  • Microsoft Codeplex
  • BitBucket

Github flow

  • Fork репозитария
  • Создание ветки
  • Коммит
  • Pull request
  • Merge

GitHub. Инструменты

  • CodeShip
  • Codacy / Codeclimate
  • JitPack

Развертывание

  • Запуск на железе
  • Запуск на виртуальной машине
  • Запуск в контейнере

Запуск на железе

  • Простота
  • Доступность
  • Что если сгорит?
  • Что если не хватит мощности?

Запуск в VM

Полная эмуляция железа

  • Надежность
  • Переносимость
  • Накладные расходы

Запуск в docker

Псевдо эмуляция железа - изоляция приложений

  • Надежность
  • Переносимость
  • Меньшие накладные расходы

Лучшего варианта нет

Cloud провайдеры

  • MS Azure / AWS
  • Heroku
  • Openshift

Openshift

  • Docker
  • Kubernetes
  • UI

https://148.251.87.70.nip.io:8443

InfluxDb

https://www.influxdata.com/time-series-platform/influxdb/

Time-series (NoSql) база данных

Каждая БД содержит набор замеров (последовательностей / series) данных

Каждая "строка" набора замеров - Время, Значение, Тэги

InfluxDb

  • Оптимально хранит Time Series данные
  • Позволяет сразу по ним считать статистику
  • Позволяет "архивировать" старые данные
  • Визуализация метрик
  • SQL like язык запросов

InfluxDb

Простой запрос
127.0.0.1:8086/query?q=SHOW+DATABASES

Openshift. Проект

4 независимых контейнера

  • WildFly
  • NDAP
  • InfluxDb
  • PostgreSQL

Openshift

  • новый проект
  • Точки доступа(Url)
  • Логины пароли
  • Переменные окружения
  • Обновление приложения
  • Логи

Openshift. Новый проект

Openshift. Новый проект

Openshift. Новый проект

Openshift. Новый проект

Openshift. Новый проект

Openshift. 4 контейнера

Openshift. Urls

Openshift. Urls

Openshift. Пароли

Openshift. Пароли

Openshift. Пароли

Openshift. Окружение

Openshift. Окружение

Openshift. Новая сборка

Openshift. Логи

Openshift. Логи

Openshift. Логи

Первое задание

  • Форк https://github.com/naumen/liquid-log
  • Создание ветки
  • Коммит
  • Pull Request
  • Упоминание @ykalemi, @d0k1
  • Комментарии
  • Merge