Commit af2c37a2 authored by Administrator's avatar Administrator
Browse files

Merge branch 'master' into 'master'

sync 1 public-group/pro-sd-ump:master

See merge request !1
parents 0bf50811 e94b2980
Pipeline #31 failed with stages
---
# Build JAVA applications using Apache Maven (http://maven.apache.org)
# For docker image tags see https://hub.docker.com/_/maven/
#
# For general lifecycle information see https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
#
# This template will build and test your projects as well as create the documentation.
#
# * Caches downloaded dependencies and plugins between invocation.
# * Verify but don't deploy merge requests.
# * Deploy built artifacts from master branch only.
# * Shows how to use multiple jobs in test stage for verifying functionality
# with multiple JDKs.
# * Uses site:stage to collect the documentation for multi-module projects.
# * Publishes the documentation for `master` branch.
variables:
# This will suppress any download for dependencies and plugins or upload messages which would clutter the console log.
# `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
# As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
# when running from the command line.
# `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins.
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true -f ./ump"
# Cache downloaded dependencies and plugins between builds.
# To keep cache across branches add 'key: "$CI_JOB_NAME"'
cache:
paths:
- .m2/repository
# This will only validate and compile stuff and run e.g. maven-enforcer-plugin.
# Because some enforcer rules might check dependency convergence and class duplications
# we use `test-compile` here instead of `validate`, so the correct classpath is picked up.
.validate: &validate
stage: build
script:
- 'mvn $MAVEN_CLI_OPTS test-compile'
only:
- master
# For merge requests do not `deploy` but only run `verify`.
# See https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
.verify: &verify
stage: test
script:
- 'mvn $MAVEN_CLI_OPTS verify site site:stage'
only:
- master
# Validate merge requests using JDK8
validate:jdk8:
<<: *validate
image: maven:3.3.9-jdk-8
# Verify merge requests using JDK8
verify:jdk8:
<<: *verify
image: maven:3.3.9-jdk-8
# For `master` branch run `mvn deploy` automatically.
# Here you need to decide whether you want to use JDK7 or 8.
# To get this working you need to define a volume while configuring your gitlab-ci-multi-runner.
# Mount your `settings.xml` as `/root/.m2/settings.xml` which holds your secrets.
# See https://maven.apache.org/settings.html
deploy:jdk8:
# Use stage test here, so the pages job may later pickup the created site.
stage: test
script:
- 'mvn $MAVEN_CLI_OPTS deploy site site:stage'
only:
- master
# Archive up the built documentation site.
artifacts:
paths:
- target/staging
image: maven:3.3.9-jdk-8
pages:
image: busybox:latest
stage: deploy
script:
# Because Maven appends the artifactId automatically to the staging path if you did define a parent pom,
# you might need to use `mv target/staging/YOUR_ARTIFACT_ID public` instead.
- mv target/staging public
dependencies:
- deploy:jdk8
artifacts:
paths:
- public
only:
- master
## Руководство контрибьютера
### Социальная инфраструктура
#### Social infrastructure
В настоящее время проектом управляет [Диктатор](https://producingoss.com/ru/social-infrastructure.html#benevolent-dictator).
Но в будущем не исключено создание другой формы правления - [Консенсусная демократия](https://producingoss.com/ru/consensus-democracy.html).
### [Инструкция](http://gitlab.asvoip.com/pro-sd/pro-sd-ump/wikis/instruction)
Перед началом работы над проектом ознакомьтесь с инструкцией. //TODO в разработке
### [Документация проекта](https://gitlab.asvoip.com/pro-sd/pro-sd-ump/wikis/project-doc)
Документация проекта. //TODO в разработке
### [Установка и настройка ПО разработки](https://gitlab.asvoip.com/pro-sd/pro-sd-ump/wikis/install-work-environment)
До начала работы установите требуемое ПО для разработки.
\ No newline at end of file
## Проект "Универсальная модульная платформа".
Перед началом работы над проектом ознакомьтесь с [Инструкцией] (http://gitlab.asvoip.com/pro-sd/pro-sd-ump/wikis/instruction)
### Основные задания
**задания в порядке выполнения и изучения материалов**
### Документация проекта
#### [Анонс проекта](http://gitlab.asvoip.com/pro-sd/pro-sd-course/wikis/project-1-plan)
#### [Цель и содержание проекта] (#13)
### Установка и настройка ПО разработки
#### [Установить и настроить Mattermost ] (#5)
#### [Установить и настроить JDK 8 и JRE 8] (#1)
#### [Установить и настроить Maven 3] (#2)
#### [Установить и настроить IntelliJ IDEA] (#3)
#### [Установить Git и настроить SSH ключи] (#6)
#### [Установить Postman для тестирования API] (#11)
#### [Установить и настроить PostgreSQL] (#12)
#### [Jenkins - Continuous Integration and Delivery server] (#17)
### Разработка проекта
#### [Инициализировать проект] (#14)
#### [SQL DataBase module] (#15)
#### [Security module - DAO, Service] (#19)
## Все задания:
### [Issues] (http://gitlab.asvoip.com/pro-sd/pro-sd-ump/issues)
## Вся документация:
### [Wiki] (http://gitlab.asvoip.com/pro-sd/pro-sd-ump/wikis/home)
## Универсальная модульная платформа
### Universal modular platform (UMP)
Универсальная модульная расширяемая открытая платформа для быстрого создания качественных
масштабируемых микросервисов с использованием современных технологий,
проверенных Open Source решений и гибких эффективных методик разработки.
### Цель и содержание проекта
Более половины времени в разработке программного обеспечения тратится на функционал,
который непосредственно не решает бизнес задачи. Многократно одни и те же требования
реализуются при разработке каждого последующего серверного программного обеспечения.
Платформа позволяет выиграть время и значительно сэкономить при разработке серверных
масштабируемых систем.
Универсальная модульная платформа содержит Java реализацию нефункциональных (не бизнес)
требований серверных приложений
в виде модулей и компонент (микросервисов), подключаемых и используемых по необходимости,
с использованием современных Open Source библиотек, фреймворков, инструментов.
Модульность платформы обеспечивает гибкость и оставляет возможность использования
широкого спектра технологий для реализации функционала систем на базе платформы,
используемых в различных сферах: услуги, финансы, логистика, медицина и пр.
#### Разработка ПО
Применение гибких Agile методик, рекомендаций и инструкций для разработки ПО снижает затраты
и риски. Участие в качестве разработчика (контрибьютера) платформы позволяет на практике
изучать новые технологии, приобретать опыт командной работы и повышать квалификацию.
Комплекс технических и методических мер позволяет успешно, в срок создавать качественный
продукт на базе платформы. Open Source лицензия увеличивает потенциальное число
разработчиков и пользователей платформы и создаваемых на ее основе компонент и систем.
#### Тестирование ПО
Юнит-тестирование позволяет автоматизировать тестирование на этапе разработки.
Интеграционные тесты проверяют взаимодействие отдельных частей программы.
Непрерывная интеграция упрощает рефакторинг и модификацию ПО.
Широкое многократное применение платформы обеспечивает ручное тестирование
и позволяет повысить ее надежность и качество.
#### Поставка ПО
Использование программных средств и методик DevOps - непрерывная поставка и развертывание,
позволяет автоматизировать процесс установки и настройки программного продукта.
Новые версии поставляются по мере готовности нового функционала.
### Преимущества
#### Преимущества для разработчика
* Закрепление и расширение теоретических ИТ знаний.
* Приобретение опыта работы с профессиональными современными средствами разработки, тестирования и развертывания.
* Применение ряда инженерных практик разработки программного обеспечения в распределенной команде.
* Получение знаний и навыков работы со стеком Java и других современных технологий.
* Включение в свое портфолио Оpen source проекта с открытым исходным кодом.
* Получение платформы для дальнейшей самостоятельной или коммерческой разработки систем.
#### Преимущества для заказчика
* Получение быстрого первого результата на старте проекта.
* Значительное уменьшение финансовых затрат.
* Сокращение ряда рисков.
* Итерационные поставки нового функционала.
* Сокращенный срок поставки программного обеспечения.
* Масштабируемый программный продукт.
#### Преимущества для пользователей
* Современный программный продукт.
* Быстрое итерационное получение и апробация нового функционала.
* Возможность предлагать новые улучшения или функционал и влиять на развитие продукта.
### Структура и архитектура платформы
Платформа и методология реализует наиболее востребованные нефункциональные (не бизнес) требования
серверных систем:
* Непрерывная интеграция - сборка, проверка качества кода, автоматизированные тесты.
* Непрерывная поставка - быстрое развертывание систем.
* Масштабирование - высокая доступность и резервирование систем.
* Защищенность - аутентификация и авторизация, управление учетными записями и доступом.
* Аудит - логирование, просмотр данных и аналитика.
* Мониторинг - сбор и отображение метрик, оповещения.
* SQL ORM and DAO - объектно-реляционное отображение и доступ к SQL базе данных.
* REST API - REST интерфейс, настройка и реализация основных методов REST контроллеров.
* и прочие
#### Модули и компоненты платформы
Проект платформы включает модули и компоненты (микросервисы):
* ump-commonmodule: модуль ядра компонент
* ump-sqldbmodule: Object-Relational Mapping and SQL Data Access Object (DAO) -
модуль объектно-реляционного отображения и доступа к SQL базе данных
* ump-restapimodule: REST API - модуль контроллеров REST API
* ump-config: компонент конфигурации
* ump-registry: регистратор компонент
* ump-bootadminserver: компонент диагностики системы
* ump-gateway: HTTP шлюз
* ump-iam: Identity and Access Management -
компонент управления идентификацией и доступом, включая сервер авторизации
* ump-elasticsearch: компонент механизма хранения, поиска и аналитики данных
* ump-logstash: компонент преобразования, индексирования данных
* ump-kibana: гибкий инструмент визуализации данных
* и другие
### Технологии
Используемые информационные технологии представляют отраслевой стандарт и имеют спецификации:
* HTTP/HTTPS
* JSON
* XML
* REST
* SQL
* OAuth 2.0
* OpenID Connect
* и прочие
### Инструментарий
Инструментарий представляет широкий спектр используемого (в основном Open Source)
программного обеспечения - ПО для разработки и коммуникации, среда выполнения языка программирования,
инструменты разработки, тестирования и развертывания,
библиотеки, базы данных, системы:
* Git
* GitLab
* Mattermost
* Java 8
* Docker
* Spring 5 / Spring Boot 2
* Hibernate 5
* PostgreSQL 10
* Keycloak 4
* ELK 6 (Elasticsearch, Logstash, and Kibana)
* и многие другие
### [Документация проекта](https://gitlab.asvoip.com/pro-sd/pro-sd-ump/wikis/project-doc)
Документация проекта включает подробное описание, схемы платформы, инструкции по установке ПО и разработке.
## [Руководство контрибьютера](https://gitlab.asvoip.com/pro-sd/pro-sd-ump/blob/master/CONTRIBUTING.md)
Если вы хотите принять участие в разработке платформы, то ознакомьтесь с руководством контрибьютера.
docker/**
\ No newline at end of file
FROM openjdk:8-jdk-alpine
ARG PROJECT_BUILD_NAME
ENV PROJECT_BUILD_NAME=${PROJECT_BUILD_NAME}
ENV JAR_FILE=${PROJECT_BUILD_NAME}.jar
RUN addgroup -g 1000 -S app && \
adduser -u 1000 -S app -G root
RUN mkdir -p /var/ump/log
RUN chmod 775 -R /var/ump
COPY ${JAR_FILE} ${JAR_FILE}
USER app
ENTRYPOINT exec java \
${JAVA_XMX:--Xmx128m} \
-Dserver.port=${HTTP_PORT} \
-Duser.home=${USER_HOME:-/var/ump} \
-jar ${JAR_FILE}
\ No newline at end of file
version: '2'
version: '3'
services:
vca-bootadminserver:
image: com.asvoip.ump/ump-bootadminserver:0.1.0
ports:
- "9000:9000"
volumes:
- log-volume:/ump/log
ump-swarmvisualizer:
image: localhost:5000/ump-swarmvisualizer:0.1.0
ports:
- "9001:8080"
networks:
- ump-network
volumes:
- ump-volume:/ump
- /var/run/docker.sock:/var/run/docker.sock
deploy:
mode: global
restart_policy:
condition: any
delay: 20s
vca-config:
image: com.asvoip.ump/ump-config:0.1.0
ports:
- "8888:8888"
volumes:
- log-volume:/ump/log
ump-bootadminserver:
image: localhost:5000/ump-bootadminserver:0.1.0
ports:
- "9000:9000"
networks:
- ump-network
volumes:
- ump-volume:/ump
environment:
HOST: ump-bootadminserver
HTTP_PORT: 9000
USER_HOME: /ump
SPRING_BOOT_ADMIN_CLIENT_URL: http://ump-bootadminserver:9000
vca-registry:
image: com.asvoip.ump/ump-registry:0.1.0
ports:
- "8761:8761"
volumes:
- log-volume:/ump/log
links:
- "vca-config"
depends_on:
- "vca-config"
ump-config:
image: localhost:5000/ump-config:0.1.0
ports:
- "8888:8888"
networks:
- ump-network
volumes:
- ump-volume:/ump
environment:
HOST: ump-config
HTTP_PORT: 8888
USER_HOME: /ump
SPRING_BOOT_ADMIN_CLIENT_URL: http://ump-bootadminserver:9000
SPRING_SECURITY_USER_PASSWORD: 12345
vca-gateway:
image: com.asvoip.ump/ump-gateway:0.1.0
ports:
- "4000:4000"
volumes:
- log-volume:/ump/log
links:
- "vca-config"
depends_on:
- "vca-config"
ump-registry:
image: localhost:5000/ump-registry:0.1.0
ports:
- "8761:8761"
networks:
- ump-network
volumes:
- ump-volume:/ump
depends_on:
- "ump-config"
deploy:
mode: global
restart_policy:
condition: any
delay: 20s
environment:
HOST: ump-registry
HTTP_PORT: 8761
USER_HOME: /ump
SPRING_CLOUD_CONFIG_URI: http://ump-config:8888
SPRING_CLOUD_CONFIG_PASSWORD: 12345
vca-security:
image: com.asvoip.ump/ump-security-impl:0.1.0
ports:
- "5000:5000"
volumes:
- log-volume:/ump/log
links:
- "vca-config"
depends_on:
- "vca-config"
vca-account:
image: com.asvoip.ump/ump-account-impl:0.1.0
ports:
- "6000:6000"
volumes:
- log-volume:/ump/log
links:
- "vca-config"
depends_on:
- "vca-config"
ump-gateway:
image: localhost:5000/ump-gateway:0.1.0
ports:
- "80:80" #http
- "443:443" #https
networks:
- ump-network
volumes:
- ump-volume:/ump
# - /etc/letsencrypt:/etc/letsencrypt
deploy:
mode: global
restart_policy:
condition: any
delay: 10s
volumes:
log-volume:
\ No newline at end of file
ump-volume:
networks:
ump-network:
......@@ -16,27 +16,35 @@
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring-boot-starter-test-version>1.5.7.RELEASE</spring-boot-starter-test-version>
<spring-boot-admin-server-version>1.5.4</spring-boot-admin-server-version>
<spring-cloud-starter-config-version>1.3.3.RELEASE</spring-cloud-starter-config-version>
<checkstyle.version>7.6</checkstyle.version>
<spring-boot-starter-security-version>1.5.7.RELEASE</spring-boot-starter-security-version>
<spring-cloud-starter-oauth2-version>1.2.1.RELEASE</spring-cloud-starter-oauth2-version>
<spring-cloud-starter-eureka-version>1.3.5.RELEASE</spring-cloud-starter-eureka-version>
<hibernate.version>5.3.7.Final</hibernate.version>
<spring-boot-starter-test.version>2.0.4.RELEASE</spring-boot-starter-test.version>
<spring-boot-admin.version>2.0.3</spring-boot-admin.version>
<spring-boot-starter-security.version>2.0.4.RELEASE</spring-boot-starter-security.version>
<spring-cloud-config.version>2.0.1.RELEASE</spring-cloud-config.version>
<spring-cloud-starter-eureka.version>2.0.1.RELEASE</spring-cloud-starter-eureka.version>
<maven-surefire-plugin.version>2.22.1</maven-surefire-plugin.version>
<docker-maven-plugin.version>0.26.1</docker-maven-plugin.version>
</properties>
<modules>
<module>ump-commonmodule</module>
<module>ump-sqldbmodule</module>
<module>ump-restapimodule</module>
<module>ump-config</module>
<module>ump-registry</module>
<module>ump-component</module>
<module>ump-bootadminserver</module>
<module>ump-security-api</module>
<module>ump-security-impl</module>
<module>ump-config</module>
<module>ump-registry</module>
<module>ump-logstash</module>
<module>ump-elasticsearch</module>
<module>ump-kibana</module>
<module>ump-metricbeat</module>
<module>ump-gateway</module>
<module>ump-account-impl</module>
<module>ump-swarmvisualizer</module>
</modules>
<!-- repositories -->
<repositories>
......@@ -55,11 +63,107 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<version>2.0.6.RELEASE</version>
<relativePath />
</parent>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<includes>
<include>**/*IT.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources-from-parent</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>../</directory>
<include>Dockerfile</include>
<include>.maven-dockerignore</include>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker-maven-plugin.version}</version>
<configuration>
<buildArgs>
<PROJECT_BUILD_NAME>${project.build.finalName}</PROJECT_BUILD_NAME>
</buildArgs>
<images>
<image>
<name>${docker.registry.domain}/${project.artifactId}</name>
<build>
<dockerFileDir>${project.build.directory}</dockerFileDir>
<tags>
<tag>${project.version}</tag>
</tags>
</build>
</image>
</images>
<pushRegistry>${docker.registry.url}</pushRegistry>
</configuration>
<executions>
<execution>
<id>Build docker image</id>
<phase>install</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>Push docker image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
......@@ -112,9 +216,7 @@
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<findbugsXmlOutput>true</findbugsXmlOutput>
<findbugsXmlWithMessages>true</findbugsXmlWithMessages>
<xmlOutput>true</xmlOutput>
<excludeFilterFile>findbugs-excludes.xml</excludeFilterFile>
</configuration>
</plugin>
<plugin>
......@@ -133,4 +235,26 @@
</plugins>
</reporting>
<profiles>
<profile>
<id>LOCAL_HOST</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<build.profile.id>LOCAL_HOST</build.profile.id>
<docker.registry.domain>localhost:5000</docker.registry.domain>
<docker.registry.url>http://${docker.registry.domain}</docker.registry.url>
</properties>