chore: скрипты сборки всех сервисов + gitignore артефактов
- buildAll.sh: ./gradlew bootJar всех Spring-сервисов (--clean опц.). - serviceAllBuild.sh: раскладка bootJar + config-repo + run-хелпер в serviceAllBuild/. - .gitignore: serviceAllBuild/ (артефакты ~1.7G) и локальный .npmrc фронта.
This commit is contained in:
@@ -72,3 +72,8 @@ out/
|
|||||||
/services/pcp-tgu-ops-ui/yarn-error.log*
|
/services/pcp-tgu-ops-ui/yarn-error.log*
|
||||||
/services/pcp-tgu-ops-ui/pnpm-debug.log*
|
/services/pcp-tgu-ops-ui/pnpm-debug.log*
|
||||||
.gstack/
|
.gstack/
|
||||||
|
|
||||||
|
# Локальная раскладка собранных bootJar всех сервисов (артефакты, ~1.7G) — не версионируем.
|
||||||
|
/serviceAllBuild/
|
||||||
|
# Машинно-зависимый npm prefix фронта (локальный путь разработчика).
|
||||||
|
/services/pcp-tgu-ui-service/.npmrc
|
||||||
|
|||||||
Executable
+24
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Сборка bootJar всех Spring-сервисов.
|
||||||
|
#
|
||||||
|
# ./buildAll.sh # собрать все jar (без тестов; bootJar тесты не гоняет)
|
||||||
|
# ./buildAll.sh --clean # clean + сборка с нуля
|
||||||
|
#
|
||||||
|
# Фронт pcp-tgu-ui-service здесь не собирается (это npm-проект, не gradle).
|
||||||
|
# Чтобы после сборки разложить jar в serviceAllBuild/ — запусти ./serviceAllBuild.sh
|
||||||
|
# (или сразу ./serviceAllBuild.sh --build, который делает сборку и раскладку вместе).
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
ARGS=()
|
||||||
|
[[ "${1:-}" == "--clean" ]] && ARGS+=(clean)
|
||||||
|
ARGS+=(bootJar)
|
||||||
|
|
||||||
|
echo "==> ./gradlew ${ARGS[*]}"
|
||||||
|
"$ROOT/gradlew" "${ARGS[@]}"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Готово. Разложить в одну папку: ./serviceAllBuild.sh"
|
||||||
Executable
+258
@@ -0,0 +1,258 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Собирает (опционально) и складывает bootJar всех Spring-сервисов в одну папку
|
||||||
|
# serviceAllBuild/ в корне проекта, рядом кладёт config-repo и хелпер запуска run.sh.
|
||||||
|
#
|
||||||
|
# Использование:
|
||||||
|
# ./serviceAllBuild.sh # только собрать jar-ы в одно место (сервисы уже собраны)
|
||||||
|
# ./serviceAllBuild.sh --build # сначала ./gradlew bootJar, потом собрать в одно место
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
OUT="$ROOT/serviceAllBuild"
|
||||||
|
SERVICES_DIR="$ROOT/services"
|
||||||
|
|
||||||
|
DO_BUILD=0
|
||||||
|
[[ "${1:-}" == "--build" ]] && DO_BUILD=1
|
||||||
|
|
||||||
|
if [[ $DO_BUILD -eq 1 ]]; then
|
||||||
|
echo "==> Сборка bootJar всех сервисов (./gradlew bootJar)..."
|
||||||
|
"$ROOT/gradlew" bootJar
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$OUT"
|
||||||
|
|
||||||
|
echo "==> Сбор jar-ов в $OUT"
|
||||||
|
count=0
|
||||||
|
for dir in "$SERVICES_DIR"/*/; do
|
||||||
|
name="$(basename "$dir")"
|
||||||
|
libs="$dir/build/libs"
|
||||||
|
[[ -d "$libs" ]] || { echo " - $name: нет build/libs (не Spring-сервис или не собран), пропуск"; continue; }
|
||||||
|
# bootJar = единственный *.jar без суффикса -plain.jar; берём самый свежий по имени
|
||||||
|
jar="$(find "$libs" -maxdepth 1 -name '*.jar' ! -name '*-plain.jar' | sort | tail -n1)"
|
||||||
|
[[ -n "$jar" ]] || { echo " - $name: bootJar не найден, пропуск"; continue; }
|
||||||
|
cp -f "$jar" "$OUT/$name.jar"
|
||||||
|
echo " + $name.jar <- $(basename "$jar")"
|
||||||
|
count=$((count + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "==> Копирую config-repo в $OUT/config-repo (самодостаточная папка)"
|
||||||
|
rm -rf "$OUT/config-repo"
|
||||||
|
cp -r "$ROOT/config-repo" "$OUT/config-repo"
|
||||||
|
|
||||||
|
echo "==> Генерирую $OUT/run.sh"
|
||||||
|
cat > "$OUT/run.sh" <<'RUNEOF'
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Запуск одного сервиса из собранной папки через java -jar.
|
||||||
|
#
|
||||||
|
# ./run.sh # список доступных сервисов
|
||||||
|
# ./run.sh spring-cloud-config-server # ПЕРВЫМ всегда поднимаем config server
|
||||||
|
# ./run.sh pcp-tgu-service # затем нужные сервисы (в отдельных терминалах)
|
||||||
|
#
|
||||||
|
# Память не ограничена. Задать лимит при необходимости:
|
||||||
|
# JAVA_OPTS="-Xmx384m" ./run.sh pcp-tgu-service
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
CONFIG_REPO="$HERE/config-repo"
|
||||||
|
|
||||||
|
JAVA_OPTS="${JAVA_OPTS:-}"
|
||||||
|
|
||||||
|
name="${1:-}"
|
||||||
|
if [[ -z "$name" ]]; then
|
||||||
|
echo "Использование: ./run.sh <имя-сервиса>"
|
||||||
|
echo
|
||||||
|
echo "Сначала запусти config server: ./run.sh spring-cloud-config-server"
|
||||||
|
echo
|
||||||
|
echo "Доступные сервисы:"
|
||||||
|
for j in "$HERE"/*.jar; do basename "$j" .jar; done | sed 's/^/ /'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
jar="$HERE/$name.jar"
|
||||||
|
[[ -f "$jar" ]] || { echo "Нет файла: $jar"; exit 1; }
|
||||||
|
|
||||||
|
if [[ "$name" == "spring-cloud-config-server" ]]; then
|
||||||
|
# config server в профиле local работает в native-режиме и читает yaml отсюда
|
||||||
|
export SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE:-local}"
|
||||||
|
export CONFIG_NATIVE_SEARCH_LOCATIONS="${CONFIG_NATIVE_SEARCH_LOCATIONS:-optional:file:$CONFIG_REPO}"
|
||||||
|
echo "==> config-repo: $CONFIG_REPO"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> java $JAVA_OPTS -jar $name.jar"
|
||||||
|
exec java $JAVA_OPTS -jar "$jar"
|
||||||
|
RUNEOF
|
||||||
|
chmod +x "$OUT/run.sh"
|
||||||
|
|
||||||
|
echo "==> Генерирую $OUT/up.sh"
|
||||||
|
cat > "$OUT/up.sh" <<'UPEOF'
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Поднять сразу несколько сервисов в фоне (config server — всегда первым).
|
||||||
|
#
|
||||||
|
# ./up.sh # запустить ВСЕ сервисы
|
||||||
|
# ./up.sh pcp-tgu-service slots-service # config server + перечисленные
|
||||||
|
#
|
||||||
|
# Имя сервиса = имя jar-файла без .jar. Логи: logs/<name>.log, pid: logs/<name>.pid.
|
||||||
|
# Погасить всё: ./down.sh
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
CONFIG_REPO="$HERE/config-repo"
|
||||||
|
LOGS="$HERE/logs"
|
||||||
|
mkdir -p "$LOGS"
|
||||||
|
|
||||||
|
JAVA_OPTS="${JAVA_OPTS:-}"
|
||||||
|
CFG="spring-cloud-config-server"
|
||||||
|
|
||||||
|
running() { local p="$LOGS/$1.pid"; [[ -f "$p" ]] && kill -0 "$(cat "$p")" 2>/dev/null; }
|
||||||
|
|
||||||
|
start_one() {
|
||||||
|
local name="$1" jar="$HERE/$1.jar"
|
||||||
|
[[ -f "$jar" ]] || { echo " ! нет $name.jar, пропуск"; return; }
|
||||||
|
if running "$name"; then echo " = $name уже запущен (pid $(cat "$LOGS/$name.pid"))"; return; fi
|
||||||
|
if [[ "$name" == "$CFG" ]]; then
|
||||||
|
SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE:-local}" \
|
||||||
|
CONFIG_NATIVE_SEARCH_LOCATIONS="${CONFIG_NATIVE_SEARCH_LOCATIONS:-optional:file:$CONFIG_REPO}" \
|
||||||
|
nohup java $JAVA_OPTS -jar "$jar" > "$LOGS/$name.log" 2>&1 &
|
||||||
|
else
|
||||||
|
nohup java $JAVA_OPTS -jar "$jar" > "$LOGS/$name.log" 2>&1 &
|
||||||
|
fi
|
||||||
|
echo $! > "$LOGS/$name.pid"
|
||||||
|
echo " + $name (pid $!) -> logs/$name.log"
|
||||||
|
}
|
||||||
|
|
||||||
|
wait_config_server() {
|
||||||
|
printf "==> жду config server на :8888"
|
||||||
|
for _ in $(seq 1 60); do
|
||||||
|
if curl -sf http://localhost:8888/actuator/health >/dev/null 2>&1; then echo " — UP"; return 0; fi
|
||||||
|
printf "."; sleep 2
|
||||||
|
done
|
||||||
|
echo " — не дождался; смотри logs/$CFG.log"; exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
targets=("$@")
|
||||||
|
if [[ ${#targets[@]} -eq 0 ]]; then
|
||||||
|
for j in "$HERE"/*.jar; do targets+=("$(basename "$j" .jar)"); done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> config server"
|
||||||
|
start_one "$CFG"
|
||||||
|
running "$CFG" && wait_config_server
|
||||||
|
|
||||||
|
echo "==> остальные сервисы"
|
||||||
|
for name in "${targets[@]}"; do
|
||||||
|
[[ "$name" == "$CFG" ]] && continue
|
||||||
|
start_one "$name"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Готово. Логи: tail -f logs/<name>.log Стоп: ./down.sh"
|
||||||
|
UPEOF
|
||||||
|
chmod +x "$OUT/up.sh"
|
||||||
|
|
||||||
|
echo "==> Генерирую $OUT/down.sh"
|
||||||
|
cat > "$OUT/down.sh" <<'DOWNEOF'
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Погасить сервисы, запущенные через up.sh.
|
||||||
|
# ./down.sh # погасить все
|
||||||
|
# ./down.sh pcp-tgu-service ... # погасить только перечисленные
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
LOGS="$HERE/logs"
|
||||||
|
|
||||||
|
names=("$@")
|
||||||
|
if [[ ${#names[@]} -eq 0 ]]; then
|
||||||
|
shopt -s nullglob
|
||||||
|
for p in "$LOGS"/*.pid; do names+=("$(basename "$p" .pid)"); done
|
||||||
|
fi
|
||||||
|
|
||||||
|
for name in "${names[@]}"; do
|
||||||
|
p="$LOGS/$name.pid"
|
||||||
|
[[ -f "$p" ]] || { echo " - $name: pid-файла нет"; continue; }
|
||||||
|
pid="$(cat "$p")"
|
||||||
|
if kill -0 "$pid" 2>/dev/null; then kill "$pid"; echo " x $name (pid $pid) остановлен"; else echo " - $name (pid $pid) уже не жив"; fi
|
||||||
|
rm -f "$p"
|
||||||
|
done
|
||||||
|
DOWNEOF
|
||||||
|
chmod +x "$OUT/down.sh"
|
||||||
|
|
||||||
|
echo "==> Генерирую $OUT/README.md"
|
||||||
|
cat > "$OUT/README.md" <<'MDEOF'
|
||||||
|
# serviceAllBuild — локальный запуск сервисов через `java -jar`
|
||||||
|
|
||||||
|
Папку формирует скрипт `../serviceAllBuild.sh`. Здесь лежат bootJar всех
|
||||||
|
Spring-сервисов, копия `config-repo` и хелпер `run.sh`.
|
||||||
|
|
||||||
|
## Куда класть config-repo
|
||||||
|
|
||||||
|
`spring-cloud-config-server` в профиле `local` работает в **native**-режиме и
|
||||||
|
читает yaml-файлы из локальной папки (а не из git). Папка `config-repo`
|
||||||
|
**уже скопирована сюда** скриптом сборки, и `run.sh` сам передаёт в config server
|
||||||
|
абсолютный путь к ней через `CONFIG_NATIVE_SEARCH_LOCATIONS`.
|
||||||
|
|
||||||
|
То есть ничего вручную раскладывать не нужно — достаточно запускать config server
|
||||||
|
через `./run.sh spring-cloud-config-server`. Если правишь конфиги — правь
|
||||||
|
`serviceAllBuild/config-repo/*.yaml` (или пересобери скриптом, чтобы подтянуть
|
||||||
|
изменения из корневого `config-repo`).
|
||||||
|
|
||||||
|
## Перед запуском: инфраструктура
|
||||||
|
|
||||||
|
Сервисам нужны (см. `config-repo/application-local.yaml`):
|
||||||
|
- PostgreSQL на `localhost:5432`
|
||||||
|
- Kafka на `localhost:29092`
|
||||||
|
|
||||||
|
Подними их (например, через docker-compose проекта) и создай БД скриптами из корня
|
||||||
|
(`create-service-dbs.sh` / `create_pcp_databases.sh`).
|
||||||
|
|
||||||
|
## Порядок запуска
|
||||||
|
|
||||||
|
Config server слушает порт **8888** — остальные сервисы ходят за конфигом именно
|
||||||
|
туда, поэтому он всегда первый. Имя сервиса = имя jar-файла без `.jar`.
|
||||||
|
|
||||||
|
### Несколько сервисов сразу (в фоне)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./up.sh # ВСЕ сервисы
|
||||||
|
./up.sh pcp-tgu-service slots-service # config server + перечисленные
|
||||||
|
```
|
||||||
|
|
||||||
|
`up.sh` сам поднимает config server первым, ждёт его готовности на :8888, затем
|
||||||
|
запускает остальные в фоне. Логи — в `logs/<name>.log`, pid — в `logs/<name>.pid`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tail -f logs/pcp-tgu-service.log # смотреть лог
|
||||||
|
./down.sh # погасить все
|
||||||
|
./down.sh slots-service # погасить один
|
||||||
|
```
|
||||||
|
|
||||||
|
### По одному (на переднем плане, каждый в своём терминале)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# терминал 1
|
||||||
|
./run.sh spring-cloud-config-server
|
||||||
|
|
||||||
|
# терминал 2 (после того как config server поднялся)
|
||||||
|
./run.sh pcp-tgu-service
|
||||||
|
```
|
||||||
|
|
||||||
|
Порты сервисов заданы в `config-repo/application-local.yaml` (`pcp.ports.*`):
|
||||||
|
tgu=7011, slots=7006, ui=7008, gateway=7080, request=7005, mission=7010 и т.д.
|
||||||
|
|
||||||
|
## Память
|
||||||
|
|
||||||
|
Лимит heap не задан — JVM сама возьмёт до 25% физической RAM на каждый процесс.
|
||||||
|
Запускай только то, что нужно прямо сейчас. При нехватке памяти можно ограничить
|
||||||
|
конкретный сервис:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
JAVA_OPTS="-Xmx384m" ./run.sh pcp-mission-planing-service
|
||||||
|
```
|
||||||
|
MDEOF
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Готово: $count сервисов в $OUT"
|
||||||
|
echo "Запуск: cd serviceAllBuild && ./run.sh spring-cloud-config-server"
|
||||||
Reference in New Issue
Block a user