Un script que configura automáticamente multiproyectos de opengrok

Hace un tiempo configuré opengrok en el servidor para leer el código, hay muchos proyectos y la configuración manual uno por uno es engorrosa.

Me llevó casi un día entero desde la creación de Tomcat y Opengrok hasta la configuración e indexación de 5 proyectos de Android.

Si tuviera que configurar manualmente algunos proyectos más, probablemente colapsaría.Al ver que muchas personas tienen la necesidad de configurar multiproyectos de opengrok, escribí este script para configurar automáticamente multiproyectos.

1. Código fuente del script

/public/opengrok$ cat setup-opengrok-projects.sh 
#!/bin/bash
#
# Copyright (C) 2023, guyongqiangx All Rights Reserved.
# 
# File Name: setup-opengrok-projects.sh 
#    Author: guyongqiangx
#      Blog: https://blog.csdn.net/guyongqiangx
#      Date: 2023-02-11
#      Info: 批量配置 opengrok 项目
#

# opengrok 安装目录
OPENGROK_APP_DIR=/opt/opengrok/dist/opengrok-1.7.42
# tomcat 安装目录
TOMCAT_APP_DIR=/opt/tomcat/apache-tomcat-10.0.27
# 代码项目根目录
PROJECT_ROOT_DIR=/public/opengrok
# 服务器访问地址
SERVER_URL=http://localhost:8000

# sudo 方式下用普通用户执行命令: "sudo -u username command"
USER="sudo -u guyongqiangx"

# 带一个参数,当前项目
setup_opengrok_project() {
    
    
    PROJECT=$1

    DATA_DIR=${PROJECT_ROOT_DIR}/data/${PROJECT}
    ETC_DIR=${PROJECT_ROOT_DIR}/etc/${PROJECT}
    SRC_DIR=${PROJECT_ROOT_DIR}/src/${PROJECT}
    LOG_DIR=${PROJECT_ROOT_DIR}/log/${PROJECT}

    # 1. 准备项目的 data, etc 和 log 目录
    ${
    
    USER} mkdir -p ${DATA_DIR} ${ETC_DIR} ${LOG_DIR}

    # 2. 准备项目的 logging.properties 文件
    ${
    
    USER} cp ${OPENGROK_APP_DIR}/doc/logging.properties ${ETC_DIR}

    # 3. 更新项目的 logging.properties 文件
    PATTERN="java.util.logging.FileHandler.pattern =.*"
    REPLACE="java.util.logging.FileHandler.pattern = ${LOG_DIR}/opengrok%g.%u.log"

    # TODAY=$(date +%F)
    # AUTHOR=guyongqiangx
    # COMMENTS="$TODAY $AUTHOR - Set logging file location to ${PROJECT} etc dir"
    # sed -i "s!^${PATTERN}!# &\n# ${COMMENTS}\n${REPLACE}!" ${ETC_DIR}/logging.properties
    ${
    
    USER} sed -i "s!^${PATTERN}!# &\n${REPLACE}!" ${ETC_DIR}/logging.properties

    # 4. 复制模板 source.war 到 tomcat 的 webapps 目录
    sudo cp ${OPENGROK_APP_DIR}/lib/source.war ${TOMCAT_APP_DIR}/webapps/${PROJECT}.war 

    # 5. 更新项目的 tomcat 配置文件 web.xml
    sudo opengrok-deploy -c ${ETC_DIR}/configuration.xml ${OPENGROK_APP_DIR}/lib/source.war ${TOMCAT_APP_DIR}/webapps/${PROJECT}.war

    # 6. 索引项目数据
    ${
    
    USER} java \
        -Djava.util.logging.config.file=${ETC_DIR}/logging.properties \
        -jar ${OPENGROK_APP_DIR}/lib/opengrok.jar \
        -c /usr/local/bin/ctags \
        -s ${SRC_DIR}  \
        -d ${DATA_DIR} \
        -P -S -G -W ${ETC_DIR}/configuration.xml \
        -U ${SERVER_URL}/${PROJECT} &> ${LOG_DIR}/index.log &
    ${
    
    USER} echo "index project ${PROJECT} in background..."
}

# for project in uboot-v2009.01  uboot-v2013.01  uboot-v2014.01  uboot-v2015.01
for project in $(ls ${
     
     PROJECT_ROOT_DIR}/src)
do
    echo "setup project ${project}..."
    setup_opengrok_project ${project}
done

while [ $(ps -ef | grep -c opengrok.jar) -ne 1 ]
do
    ${
    
    USER} echo -n .
    sleep 2
done

# sudo service tomcat restart
sudo systemctl restart tomcat.service
echo "done!"

2. ¿Cómo usarlo?

2.1 Guión de implementación

Debe instalar Tomcat y Opengrok antes de usarlo. Busque cómo instalarlo usted mismo.

Luego haga la siguiente configuración en el archivo de script:

# opengrok 安装目录
OPENGROK_APP_DIR=/opt/opengrok/dist/opengrok-1.7.42
# tomcat 安装目录
TOMCAT_APP_DIR=/opt/tomcat/apache-tomcat-10.0.27
# 项目根目录
PROJECT_ROOT_DIR=/public/opengrok
# 服务器访问地址
SERVER_URL=http://localhost:8000

# 使用普通用户执行 sudo 命令: "sudo -u username command"
USER="sudo -u guyongqiangx"

El último elemento es usar sudo para realizar operaciones de usuario normales, por lo que debe proporcionar el nombre de usuario del usuario normal.

2.2 Preparar el código del proyecto

Luego coloque todos los códigos relacionados con el proyecto en el subdirectorioPROJECT_ROOT_DIR del directorio raíz del proyecto ( ) , similar a lo siguiente:src

/public/opengrok$ tree . -L 2
.
├── setup-opengrok-projects.sh
└── src
    ├── uboot-v2009.01
    ├── uboot-v2013.01
    ├── uboot-v2014.01
    ├── uboot-v2015.01
    ├── uboot-v2016.01
    ├── uboot-v2017.01
    ├── uboot-v2018.01
    ├── uboot-v2019.01
    ├── uboot-v2020.01
    ├── uboot-v2021.01
    ├── uboot-v2022.01
    └── uboot-v2023.01

13 directories, 1 file

De forma predeterminada, el script analiza todas las carpetas en los srcsubdirectorios y crea un elemento con el nombre de esa carpeta.

Si solo desea operar en ciertas carpetas específicas, puede modificar la lista de elementos de configuración del script, similar a la siguiente:

for project in uboot-v2009.01  uboot-v2013.01  uboot-v2014.01  uboot-v2015.01
# for project in $(ls ${PROJECT_ROOT_DIR}/src)
do
    echo "setup project ${project}..."
    setup_opengrok_project ${project}
done

2.3 Ejecute el script para configurar todos los elementos

Una vez que el código esté listo, ejecute el script con permiso sudo en el directorio raíz del proyecto, de la siguiente manera:

/public/opengrok$ sudo bash setup-opengrok-projects.sh 
[sudo] password for guyongqiangx: 
setup project uboot-v2009.01...
index project uboot-v2009.01 in background...
setup project uboot-v2013.01...
index project uboot-v2013.01 in background...
...
setup project uboot-v2022.01...
index project uboot-v2022.01 in background...
setup project uboot-v2023.01...
index project uboot-v2023.01 in background...
..............done!

Después de ejecutar el script hay una larga espera hasta que la salida del script muestra "¡Listo!"

El script debe ejecutarse en modo sudo, ya que algunas operaciones requieren autorización sudo para modificar archivos en el directorio de instalación de tomcat.

Entre ellos, el registro de los datos del proyecto de índice se redirige al index.logarchivo , por ejemplo:

/public/opengrok$ ls -lh log/uboot-v2009.01/
total 16M
-rw-r--r-- 1 root         root  138K Feb 11 23:55 index.log
-rw-r--r-- 1 guyongqiangx users  16M Feb 11 23:55 opengrok0.0.log

2.4 Estructura de directorios del proyecto

Una vez configurado el proyecto, la estructura de directorios es la siguiente:

/public/opengrok$ tree . -L 2
.
├── data
│   ├── uboot-v2009.01
│   ...
│   └── uboot-v2023.01
├── etc
│   ├── uboot-v2009.01
│   ...
│   └── uboot-v2023.01
├── log
│   ├── uboot-v2009.01
│   ...
│   └── uboot-v2023.01
├── setup-opengrok-projects.sh
└── src
    ├── uboot-v2009.01
    ├── ...
    └── uboot-v2023.01

52 directories, 1 file

en,

  • src es el código de cada proyecto
  • data son los datos indexados por cada proyecto
  • etc es el archivo de configuración correspondiente para cada proyecto
  • log es el registro de cada operación de índice del proyecto y análisis

3. Preguntas

Actualmente, los proyectos múltiples creados de esta manera funcionan, pero cambiar entre proyectos mientras se navega es engorroso.

Quiero poder cambiar entre el mismo archivo en diferentes proyectos de una manera relativamente simple, como la lista desplegable a continuación:

alternar menú desplegable en el proyecto opengrok

Haga clic en el elemento de la lista desplegable para ver el mismo archivo en el proyecto correspondiente /build/envsetup.sh. Es muy conveniente cuando se ven varias versiones del mismo archivo. Si sabe cómo configurarlo, hágamelo saber. Muchas gracias ~

Supongo que te gusta

Origin blog.csdn.net/guyongqiangx/article/details/128991306
Recomendado
Clasificación