Notificación del complemento DingTalk
La versión anterior de Jenkins era 2.264, y después de instalar el complemento dingdingtalk, no se puede mostrar normalmente en la configuración global. Esto debería deberse a la visualización incompleta de la interfaz GUI de Android. Se pueden usar la versión 2.263 y anteriores. Así que sólo puedo volver a esta versión y usarla normalmente.
Construcción programada automática
H 8 * * *: Compilación automática a las 8 en punto todos los días
Compilación una vez cada 2 horas: HH/2 * * *
Compilación periódica: la tarea compila periódicamente el proyecto, esto es para activar la tarea de compilación en el momento especificado (independientemente de los datos en SVN Ya sea que haya un cambio o no, se ejecuta una compilación cronometrada)
Encuesta SCM:
1. Encuesta SCM: verifique periódicamente los cambios en el código fuente (según el número de versión del software SCM), si hay una actualización, verifique el código más reciente y luego ejecute la acción de compilación (encueste SVN periódicamente para verificar si hay cualquier cambio de datos en SVN, si hay cambios, entonces ejecute la tarea de compilación)
2. Si quiero verificar los cambios del código fuente cada 5 minutos, ejecútelos si hay un cambio
Limpiar versiones históricas
Solo se conservan las últimas 10 compilaciones históricas para cada compilación, y las compilaciones históricas se guardan en el directorio de instalación de Jenkins en la unidad C de forma predeterminada.
Registre el proceso de empaquetado a través de Jenkins.
Anteriormente, el proceso de actualización de la versión de la empresa consistía en transferir la tabla primero, luego compilar y empaquetar ab, luego nombrar ab manualmente y luego cargarla manualmente en la CDN. Luego permita que el usuario acepte el incremento modificando la configuración de parámetros en línea. Por eso quiero automatizar los pasos para cargar Ab. El siguiente es el proceso de grabación:
- La primera es la descripción del proceso de construcción,
nombre del parámetro | Acción concreta |
---|---|
Ruta del proyecto | Directorio de Ingeniería de Proyectos |
excelCanal | La lógica específica es ejecutar la herramienta de conversión de tablas. La lógica específica es utilizar de forma predeterminada el directorio de tablas en el directorio de nivel superior del directorio del proyecto. A continuación se encuentran todos los nombres de archivos que contienen los dos caracteres **<tabla de transferencia>* * y los devuelve en una matriz. El propósito Es decir, si la herramienta de transferencia de tabla multicanal es diferente, solo necesita desplegar y seleccionar la herramienta de transferencia de tabla correspondiente. |
versión ab | El número de versión del recurso ab, que controla la versión del nombre ab empaquetado. |
Registro detallado | Si se debe imprimir la salida del registro por unidad |
esSubirAB | Controle si es necesario cargar ab automáticamente en CDN, de modo que solo sea necesario imprimir ab fuera del paquete y no sea necesario cargarlo en CDN. |
CDN_PATH | [Cuenta]:[Contraseña]@[dirección IP]:[Puerto] /[directorio de almacenamiento AB] Ejemplo: cdnftp:cdnftp#[email protected]:6666/android/update Este parámetro depende de qué herramienta de carga se utiliza. La empresa usa FileZilla. Si usa la línea de comando para cargar, debe traer el formato como este. |
esCopyCltSvrData | Ya sea para copiar las habilidades del cliente, los niveles y los archivos DLL de batalla al servidor de batalla para su envío. |
La lógica específica del parámetro ProjectPath es la siguiente:
def List = [];
List = ['D:/agame/trunk/android', 'D:/agame/jenkins_test/android'];
return List
La lógica específica del parámetro excelChannel es la siguiente:
File pathFile = new File(ProjectPath + "/GameUnity/Build/path.bat");
def reg = ~/PRODUCT_DATA_PATH=(.*)"/
def path = ""
pathFile.text.eachLine({
line->
def matcher = reg.matcher(line);
def result = matcher.find()
if(result)
{
path = matcher.group(1)
}
})
if(path == "")
{
tmpPath = ProjectPath + "/../data"
File tmpDataDir = new File(tmpPath);
if(tmpDataDir.exists())
path = tmpPath;
else
return ["path.bat未配置PRODUCT_DATA_PATH"]
}
def dataPath = path
File dir = new File(dataPath);
def names = [];
def regExcel = ~/.*转表.*bat/
dir.eachFile({
file->
def matcher = regExcel.matcher(file.name);
def result = matcher.find()
if(result)
//names << file.name;
names << file.getName().split("\\.")[0]
});
return names
La línea de comando ejecutada por el proceso de compilación:
@echo OFF
@echo %ProjectPath%
%ProjectPath:~0,2%
set ext="/GameUnity/Build"
set build_path=%ProjectPath%%ext%
@echo %build_path%
cd %build_path%
call path.bat
python -u BuildJenkins.py
if %ERRORLEVEL% neq 0 exit
set buildType=0
REM echo packageType is:%packageType%
if "%packageType%"=="update" (
set buildType=1
)
REM python -u BuildCore.py build %abVersion% %buildType%
if "%isCopyCltSvrData%"=="true" (
python -u BuildCore.py copy_clt_svr_data
)
if "%isUploadAB%"=="true" (
@echo 开始执行上传AB
cd uploadAB
python -u UploadAb.py %abVersion%
)
- La lógica específica ejecuta la lógica central de BuildCore.py en el directorio de compilación del proyecto.
- Después de configurar Jenkin, solo necesita ingresar parámetros de acuerdo con las necesidades específicas para comenzar a construir. Desde empaquetar recursos ab hasta cargar ab, se puede automatizar.