Instalación Jenkins para DevOps
- Instalacion de Java JDK
- Instalación de Jenkins 2.440.2 LTS
- Configuración inicial de servidor Jenkins
- Instalación de Plugins
- Instalación del Plugin Unity3d en Jenkins.
- Configurar Unity3d plugin con Jenkins
- Instalación de NUnit
- Creación de Job en Jenkins para compilar un proyecto en Unity3D
- Job para compilar proyecto en Android
- Instalación e inicialización de Ngrok
- Creación de solicitud HTTP POST (Webhook)
- Creación de la solicitud Webhook desde Bitbucket
IMPORTANTE
Es importante que para la instalacion y uso de jenkins se utilice una version de WIN 10 PRO
Instalacion de Java JDK
Para el funcionamiento de Jenkins, se requiere la instalación de Java JDK versión 11, 17 o 21. Puedes obtenerlo descargándolo desde la página oficial de Java. En este ejemplo, se empleará la versión 21 del JDK.

Una vez descargado el instalador, procederemos a ejecutarlo haciendo doble clic y concederemos los permisos de administrador cuando se soliciten.

Se abrirá la ventana del asistente de instalación, en la cual procederemos a hacer clic en el botón "Next".

En la ventana siguiente, se mostrará la ubicación predeterminada para la instalación del JDK. Mantendremos esta ubicación por defecto y procederemos haciendo clic en el botón "Next".

La instalación del JDK comenzará.

Una vez completada la instalación, se abrirá nuevamente la ventana del asistente, indicando que la instalación ha finalizado.

Para verificar la versión del JDK instalada, abriremos el símbolo del sistema (CMD) y ejecutaremos el comando "java -version".

Instalación de Jenkins 2.440.2 LTS
Accederemos al sitio web oficial de Jenkins para proceder con la descarga. Buscaremos la versión con la etiqueta LTS (Soporte a Largo Plazo) y seleccionaremos la opción destinada a sistemas Windows.

Seremos redirigidos a una nueva página donde la descarga iniciará automáticamente. En caso de que la descarga no se inicie automáticamente, haremos clic en el enlace "Download hasn't started? Click this link".

Tras descargar el instalador, procederemos a ejecutarlo haciendo doble clic para iniciar el asistente de instalación. Luego, presionaremos el botón "Next" para avanzar en el proceso.

En la siguiente ventana, tendremos la opción de visualizar y modificar la ruta de instalación de Jenkins. En este caso, mantendremos la ruta predeterminada y procederemos haciendo clic en "Next".

En la ventana siguiente, seleccionaremos la opción "Run service as local or domain user". Luego, proporcionaremos el nombre de usuario y la contraseña de nuestro Windows correspondientes.

Una vez ingresadas las credenciales, haremos clic en "Test Credentials" para validarlas. Si aparece una marca de verificación verde, indicando éxito, procederemos a hacer clic en "Next".

Si aparece el mensaje "This account either does not have the privilege to logon as service or the account was unable to be verified", procederemos a seguir los pasos detallados en la sección de Configuración de permisos para el inicio de servicio de Jenkins para solucionar este problema.
Configuración de permisos para el inicio de servicio de Jenkins
Si aparece el mensaje “Invalid Logon“, se debe a que Windows no tiene los permisos para iniciar el servicio de Jenkins

Cerraremos el asistente de instalación y procederemos a abrir el "diálogo de ejecución" utilizando la combinación de teclas "WIN+R". Posteriormente, escribiremos "control admintools".

Se abrirá la carpeta de Herramientas Administrativas, donde ejecutaremos el programa "Directiva de Seguridad Local".

Una vez abierta la herramienta "Directiva de Seguridad Local", accederemos a la sección de "Directivas locales" y seleccionaremos "Asignación de derechos de usuario". En esta sección, ubicaremos y elegiremos la opción "Iniciar sesión como servicio".

Haremos doble clic sobre la opción "Iniciar sesión como servicio", lo que abrirá una nueva ventana. En esta ventana, seleccionaremos el botón "Agregar usuario o grupo".

Se abrirá otra ventana en la que nos dirigiremos a la sección "Escribe los nombres de objeto que quieres seleccionar". Aquí, escribiremos el nombre de usuario de Windows, en este caso, utilizaremos el usuario "VirtualBox". Posteriormente, daremos clic en "Aceptar" y la ventana se cerrará.

En la ventana de propiedades, verificaremos que el usuario que hemos agregado esté presente. Luego, haremos clic en "Aplicar" y después en "Aceptar", cerrando así la ventana. A continuación, podemos cerrar el programa de Directiva de Seguridad Local. Ahora, podemos intentar nuevamente ingresar nuestras credenciales en el instalador de Jenkins.

Mantendremos el puerto 8080 como el valor predeterminado. Posteriormente, seleccionaremos la opción "Test Port" para evaluar la disponibilidad del puerto. Si aparece una marca de verificación verde, indicando éxito en la prueba, procederemos haciendo clic en "Next".

En la siguiente ventana, se nos solicitará ingresar la ruta donde está instalado el JDK. En caso de que no se seleccione automáticamente, será necesario hacerlo manualmente haciendo clic en el botón "Change". Una vez seleccionada la ruta, procederemos a hacer clic en "Next".

En la siguiente ventana, simplemente haremos clic en "Next".

Haremos clic en "Install" para iniciar el proceso de instalación.

En caso de que se soliciten permisos de administrador, procederemos a concederlos seleccionando "Sí", y la instalación continuará.

Una vez finalizada la instalación, aparecerá una ventana indicando que el proceso ha concluido. En este punto, seleccionaremos el botón "Finish".

A continuación, abriremos nuestro navegador web y en la barra de direcciones ingresaremos "localhost:8080". Si la instalación se realizó correctamente, se abrirá la ventana de "Getting Started" en Jenkins.
Normalmente al finalizar la instalación solo se abre el navegador con la página de inicio de Jenkins

Configuración inicial de servidor Jenkins
Después de instalar correctamente Jenkins se abrirá una ventana en el navegador donde se mostrará la pantalla de inicio de Jenkins. En caso de que no se abra el navegador, abrir cualquier otro y en la barra de búsqueda escribir localhost:8080

Para poder desbloquear Jenkins y poder acceder a su configuración, para eso es necesario dirigirse a la ruta que se muestra en la pagina de bienvenida de Jenkins.

Para proceder, copiamos la dirección proporcionada por Jenkins en el explorador de archivos. Una vez localizados en la carpeta "secrets", buscamos el archivo "InitialAdminPassword" y lo seleccionamos. Posteriormente, hacemos clic derecho para elegir la opción "Abrir con" y seleccionamos Bloc de Notas.


Una vez abierto el archivo 'InitialAdminPassword', nos encontraremos con una serie de caracteres que representan la contraseña de acceso. Copiamos estos caracteres y regresamos al navegador donde tenemos Jenkins iniciado.

Procedemos a pegar la contraseña en el campo 'Administrator password' y luego hacemos clic en 'Continue'.

Seremos redirigidos a una página donde podremos proceder a instalar los plugins necesarios para utilizar Jenkins con Unity.

Instalación de Plugins
En la ventana de bienvenida, encontramos dos botones debajo: uno para instalar los plugins más útiles para Jenkins y otro para una instalación de plugins personalizada. Seleccionamos 'Select Plugins to Install', ya que utilizaremos plugins específicos para utilizar Jenkins en Unity.

redirigidos a una nueva ventana, seleccionamos los plugins necesarios para la instalación. Además de los plugins ya seleccionados, también instalaremos los siguientes adicionales:
- Dashboard View
- Build Name and Description Setter
- MSBuild
- Copy Artifact
- Bitbucket
- WMI Windows Agents
- Role-based Authrization Strategy
- Locale
- Backup plugin
- Atlassian Jira Software Cloud
- Jira Issue Updater
- JIRA Pipeline Steps
- Jira plugin
- JIRA Trigger Plugin
- Jira-ext Plugin
- JiraTestResultReporter
Desmarcamos los siguientes plugins:
- PAM Authentication
- LDAP
Una vez seleccionados los plugins necesarios, hacemos clic en el botón 'Install' para iniciar la instalación de los mismos

Al hacerlo, seremos redirigidos a una nueva ventana donde observaremos el proceso de instalación de los plugins

Una vez completada la instalación de los complementos, aparecerá un formulario en el que debemos ingresar los datos necesarios en los campos de texto para crear una cuenta de administrador. Después de llenar todos los campos, seleccionamos Save and continue'.
En este ejemplo, se usara Admin-Jenkins y J12345 como usuario y contraseña.

En la ventana siguiente, se configura la URL de Jenkins. Mantenemos la configuración tal y como está y luego seleccionamos 'Save and Finish'.

Para concluir, es necesario presionar el botón 'Restart' para reiniciar Jenkins y que todos nuestros cambios se apliquen correctamente.

Esperamos brevemente y la página se recargara automaticamente. Se mostrará la ventana de inicio de sesión de Jenkins, solicitando las credenciales del usuario y la contraseña de la cuenta de administrador para iniciar sesión.

Si los datos son validos, se mostrara la pagina principal de Jenkins.

Instalación del Plugin Unity3d en Jenkins.
El plugin Unity3D es una extensión que habilita el uso del Editor de Unity y la creación de compilaciones desatendidas (sin interfaz gráfica) mediante comandos.
Para instalar el plugin Unity3D, seleccionamos 'Administrar Jenkins' en el menú lateral izquierdo.

En el siguiente menú, seleccionamos 'Administrar Plugins'.

Se cargara una página con 4 pestañas, selecciona la pestaña 'Todos los plugins'. En la barra de búsqueda ubicada arriba de las 4 pestañas, escribe 'Unity'. Luego, selecciona el plugin Unity3D y haz clic en el botón 'Descargar ahora e instalar después de reiniciar'.

En la ventana siguiente, se muestra el proceso de instalación del plugin. Seleccionamos la opción de reiniciar Jenkins una vez que la instalación haya finalizado y no haya trabajos en ejecución. Posteriormente, esperamos a que Jenkins se reinicie

Al recargar la página aparecerá este mensaje.

Después de unos minutos Jenkins se reiniciará y nos dirigirá a la pagina principal.

Configurar Unity3d plugin con Jenkins
Seleccionamos 'Administrar Jenkins' en el menú lateral izquierdo.

En el siguiente menú, seleccionamos 'Global Tool Configuration'."

Dentro de la sección 'Global Tool Configuration', buscamos la categoría de Unity3d. Hacemos clic en 'Añadir Unity 3D' e ingresamos el nombre de la versión de Unity que queremos utilizar, así como especificamos el directorio de instalación correspondiente. Finalmente, aplicamos los cambios y guardamos (Apply y Save).
Nota: La ruta de instalación por defecto de Unity esta en C:\Program Files\Unity\Hub\Editor\

Instalación de NUnit
NUnit es una extensión de Jenkins que posibilita la lectura de archivos de reporte de prueba en formato .xml y su representación en una interfaz gráfica. Esto facilita al usuario la visualización y comprensión de estos reportes
En el menú siguiente, se selecciona 'Global Tool Configuration'. Esto abrirá una página con 4 pestañas. Se elige la pestaña 'Todos los plugins', se escribe 'NUnit' en la barra de búsqueda ubicada encima de las 4 pestañas, se selecciona el plugin NUnit y se hace clic en el botón 'Descargar ahora e instalar después de reiniciar'.

En la ventana siguiente, se muestra el proceso de instalación del plugin. Seleccionamos la casilla 'Reiniciar Jenkins cuando termine la instalación y no queden trabajos en ejecución' y esperamos a que Jenkins se reinicie.
En caso de que no actualice pasando 2 minutos, actualizar la página para volver a la pagina principal

Creación de Job en Jenkins para compilar un proyecto en Unity3D
REQUISITOS PREVIOS: Antes de realizar esta guía es necesario tener listo el repositorio que se va a trabajar, con el archivo .gitignore ya configurado para un proyecto en Unity3d así como subir el proyecto al repositorio mencionado anteriormente.
En la página de bienvenida de Jenkins, hacemos clic en 'Create a Job'.

En la siguiente ventana, en el campo de texto, ingresamos el nombre del trabajo seguido del tipo de proyecto (seleccionamos 'Crear un proyecto de estilo libre'). Luego, hacemos clic en el botón OK.

Al presionar OK, se mostrará una ventana con 5 pestañas. En la primera pestaña (General), establecemos una descripción de lo que realizará el Job.

En la pestaña 'Source Code Management', seleccionamos Git y configuramos el repositorio en el campo 'Repository URL'.

Introduce los datos de inicio de sesión de Bitbucket y luego selecciona 'Add'.

En la sección de Credenciales, elegimos las credenciales de usuario de Bitbucket. En la opción de Branch Build, seleccionamos la rama de la cual deseamos generar los compilados.

En 'Build Triggers', configuramos lo siguiente:
- Marcamos la opción 'Build when a change is pushed to BitBucket'.
- En 'Override Repository URL', agregamos el enlace del repositorio."

En la sección 'Build Environment', configuramos lo siguiente:
- Para 'Abort the build if it’s stuck', seleccionamos la estrategia de 'Time-out' como 'absolute' y dejamos el 'Timeout minutes' en 30.
- En 'Acciones timeout', agregamos una acción para 'abort the Build'.
- Marcamos la opción 'Add timestamps to the Console Output'.
- Activamos 'Set Build Name' y en 'Build Name' agregamos:


En la sección 'Build', realizamos las siguientes configuraciones:
- Seleccionamos 'Add build step' → 'Invoke Unity3D Editor'.
- Configuramos la versión de Unity en 'Unity3d installation name'.
- En 'Editor command line arguments', agregamos:
nographics -batchmode -quit -executeMethod JenkinsBuild.BuildWindows64 "${JOB_Name}" "C:\Jenkins\${JOB_Name}\Builds\${BUILD_NUMBER}\output"
- Aplicamos cambios y guardamos (Apply y Save) y abrirá la pagina del Job.

Nota: Subimos los cambios que vayamos haciendo en Unity al repositorio en Bitbucket
Dentro de la página del 'Job', ubicamos el botón con el icono de reloj y le damos clic para iniciar la ejecución del Job. En el menú lateral izquierdo, en la parte inferior, se pueden visualizar las veces que se ha ejecutado el Job.

Job para compilar proyecto en Android
REQUISITOS PREVIOS: Para compilar en Android, es necesario modificar el script JenkinsBuils y agregar los parámetros y métodos para crear el proyecto a Android y exportar el APK.
Script JenkinsBuils.cs
// ------------------------------------------------------------------------------------------------
// Assets/Editor/JenkinsBuild.cs
// ------------------------------------------------------------------------------------------------
using UnityEditor;
using System;
using System.Collections.Generic;
using UnityEditor.Build.Reporting;
public class JenkinsBuild
{
static string[] EnabledScenes = FindEnabledEditorScenes();
[MenuItem("File/AutoBuilder/Android")]
static void BuildAndroid()
{
Args args = FindArgs();
string fullPathAndName = args.targetDir + args.appName;
BuildProject(EnabledScenes, fullPathAndName, BuildTargetGroup.Android, BuildTarget.Android, BuildOptions.None);
}
static Args FindArgs()
{
Args returnValue = new Args();
string[] args = System.Environment.GetCommandLineArgs();
int execMethodArgPos = 1;
bool allArgsFound = false;
for (int i = 0; i < args.Length; i++)
{
if (args[i] == "-executeMethod")
execMethodArgPos = i;
int realPos = execMethodArgPos == 1 ? i - 2 : i - 1;
if (realPos < 0)
continue;
if (realPos == 0)
returnValue.appName = args[i];
else if (realPos == 1)
{
returnValue.targetDir = args[i];
if (!returnValue.targetDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()))
returnValue.targetDir += System.IO.Path.DirectorySeparatorChar;
allArgsFound = true;
}
}
if (!allArgsFound)
System.Console.WriteLine("[JenkinsBuild] Incorrect Parameters for -executeMethod Format: -executeMethod JenkinsBuild.BuildWindows64 <app name> <output dir>");
return returnValue;
}
static string[] FindEnabledEditorScenes()
{
List<string> EditorScenes = new List<string>();
foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
{
if (scene.enabled)
EditorScenes.Add(scene.path);
}
return EditorScenes.ToArray();
}
static void BuildProject(string[] scenes, string targetDir, BuildTargetGroup buildTargetGroup, BuildTarget buildTarget, BuildOptions buildOptions)
{
System.Console.WriteLine("[JenkinsBuild] Building: " + buildTargetGroup.ToString() + buildTarget.ToString());
bool switchResult = EditorUserBuildSettings.SwitchActiveBuildTarget(buildTargetGroup, buildTarget);
if (switchResult)
System.Console.WriteLine("[JenkinsBuild] Successfully changed Build Target to: " + buildTarget.ToString());
else
System.Console.WriteLine("[JenkinsBuild] Unable to change Build Target to: " + buildTarget.ToString() + " Exiting...");
BuildReport buildReport = BuildPipeline.BuildPlayer(scenes, targetDir, buildTarget, buildOptions);
BuildSummary buildSummary = buildReport.summary;
if (buildSummary.result == BuildResult.Succeeded)
System.Console.WriteLine("[JenkinsBuild] Build Success: Time: " + buildSummary.totalTime);
else
System.Console.WriteLine("[JenkinsBuild] Build Failed: Time: " + buildSummary.totalTime + " Total Errors: " + buildSummary.totalErrors);
}
private class Args
{
public string appName = "AppName";
public string targetDir = "~/Desktop";
}
}
Para convertir un proyecto de Windows a Android, simplemente accede al Job que deseas convertir, ve a la pestaña 'Ejecutar', busca la opción 'Editor command line arguments' y reemplaza 'BuildWindows64' por 'BuildAndroid' después del comando 'JenkinsBuild'. El resultado será 'JenkinsBuild.BuildAndroid', como se muestra en la siguiente imagen:
Nota: Al ejecutar el Job, el script JenkinsBuild, se encargara de convertir todo el proyecto a Android.

Este documento proporciona información sobre cómo firmar un archivo APK, ya que Android exige que todos los APK estén digitalmente firmados con un certificado para poder ser instalados o actualizados en un dispositivo
REQUISITOS PREVIOS:
- Tener instalado Java JDK
- Tener instalado Zip for Windows
- Tener una llave Android keystore desde Unity para firmar el APK
Para habilitar la ejecución de comandos CMD, es necesario configurar la ruta del ejecutable cmd.exe en la configuración global de Jenkins.
En la página de bienvenida de Jenkins, navegamos a 'Administrar Jenkins' → 'Configuración del sistema'. Buscamos la opción 'Línea de comandos' y configuramos la ruta del ejecutable 'cmd.exe'. Asegúrate de que quede como sigue:


Dentro del Job encargado de generar el archivo APK, dirigirse a la pestaña 'Ejecutar', debajo del Step 'Invoke Unity Editor', seleccionar 'Añadir un nuevo paso' y optar por la opción 'Ejecutar un comando de Windows'. Esto añadirá un campo de texto donde se pueden ejecutar comandos para CMD.

Por defualt, Unity asigna una llave de tipo debug para poder exportar el archivo APK por lo que se deberá eliminar dicha llave y firmar de nuevo el APK con una nueva llave, con los datos del desarrollador.
Aparecerá un campo de texto donde podemos ingresar los siguientes comandos para firmar el APK. Usando la herramienta zip for Windows, accedemos a los archivos del APK y eliminamos la carpeta META-INF, que contiene la clave de depuración.
cd C:\Program Files (x86)\GnuWin32\bin\ zip -d "C:\Proyectos Development\%JOB_Name%\Builds\%BUILD_NUMBER% \output\Chichen_Itza.apk" "META-INF*"
Una vez eliminada la carpeta META-INF, procedemos a aplicar la nueva firma utilizando el siguiente comando:
cd C:\Program Files\Java\jdk1. jarsigner -keystore 8 .0_281\bin\ "C:\Users\PC\Documents\Llaves Android\hypnogic.keystore" -storepass G4laxy17 -keypass G4laxy17 "C:\Proyectos Development\%JOB_Name% \Builds\%BUILD_NUMBER%\output\Chichen_Itza.apk" hypnogic
- jarsigner: comando para realizar la firma
- -keystore: ruta de la carpeta donde esta o están las llaves
- -storepass: contraseña del almacén de la llave
- -keypass: contraseña de la llave + ruta de donde esta ubicado el archivo APK + alias que se creo dentro de la llave.
Para finalizar, verificamos con el siguiente comando que el APK se haya firmado correctamente con la nueva llave:
jarsigner -verify -verbose -certs "C:\Proyectos Development\%JOB_Name% \Builds\%BUILD_NUMBER%\output\Chichen_Itza.apk"
Al ejecutar el 'Job', se mostrarán estos mensajes que indican que el APK ha sido firmado con la nueva clave.

Instalación e inicialización de Ngrok
Este documento proporciona información sobre como instalar y configurar Ngrok, aplicación que nos permite exponer a internet nuestro localhost.
Nos dirigimos a la sección de descarga de la página Ngrok y seleccionamos Download for Windows

IMPORTANTE: Es necesario crearse una cuenta e iniciar sesión (desde su página web) para poder usar Ngrok con su cuenta gratuita.
Nos situamos en la carpeta donde se descargó Ngrok, es un archivo .rar

Seleccionamos el archivo con el botón derecho del ratón y lo descomprimimos. Esto generará un archivo llamado 'ngrok.exe'.


Seleccionamos el archivo ngrok.exe con clic derecho y seleccionamos cortar.

Accedemos a la ubicaci ón donde Jenkins está instalado. Luego, hacemos clic derecho en cualquier parte dentro de la carpeta que contiene los archivos y seleccionamos 'Pegar'.

Ejecutamos ngrok.exe.

A continuación, se abrirá una ventana similar a la línea de comandos de Windows (CMD)

Escribimos el comando “ngrok.exe http 8080“.

Pulsamos Enter y Ngrok se iniciará, exponiendo nuestro localhost a Internet. Los dos enlaces dentro del recuadro rojo son las páginas a las que debemos acceder en nuestro navegador para llegar al servidor Jenkins.

En esta captura se ingresó desde una PC física al servidor Jenkins desde una máquina virtual con ayuda de ngrok

Creación de solicitud HTTP POST (Webhook)
Este documento proporciona una guía que permite enlazar Jenkins con Bitbucket para crear una solicitud webhook y Jenkins pueda crear compilados automáticamente cuando detecte un cambio en el repositorio de Bitbucket.
IMPROTANTE
Antes de poder establecer la configuración es importante tener un subdominio o hostname fijo al enlace de Jenkins (localhost:8080)
Como ngrok se está usando con cuenta gratis los subdominios son aleatorios
Nos dirigimos a Administrar Jenkins → Configurar el Sistema


Buscamos la sección 'Jenkins Location' y escribimos el enlace proporcionado por ngrok, seguido de '/bitbucket-hook/'. Por ejemplo: 'http://ed9bd2f5f6a1.ngrok.io/bitbucket-hook/'. Luego, aplicamos los cambios y guardamos
Nota: es importante que después del enlace lleve si o si /bitbucket-hook/ de lo contrario no se podrá acceder al repositorio desde Jenkins

La dirección debe terminar con “/bitbucket-hook/”, ejemplo: http://62c837affa55.ngrok.io/bitbucket hook/

Creación de la solicitud Webhook desde Bitbucket
En nuestra cuenta de Bitbucket nos dirigimos a Repositorios

Seleccionamos el repositorio del que deseamos que Jenkins vaya detectando cambios

Una vez dentro de la página del repositorio nos vamos a Repository settings.

En las opciones que tenemos del lado izquierdo seleccionamos Webhooks.

Una vez seleccionado nos dirigirá a la página de Webhooks, Seleccionamos Add Webhook

Agregamos el nombre de como queremos que se llama nuestro Webhook, establecemos la página que agregamos en la configuración de Jenkins, http://ed9bd2f5f6a1.ngrok.io/bitbucket-hook/, tildamos la casilla Skip certificate verification y por último presionamos Save
La dirección debe terminar con “/bitbucket-hook/”, ejemplo: http://62c837affa55.ngrok.io/bitbucket-hook/

Al guardar nos aparecerá una notificación indicando que el Webhook ha sido creado
