
Integración con Jenkins
Jenkins es un servidor de automatización de código abierto ampliamente utilizado para la integración y entrega continuas. Orquesta las etapas de compilación, prueba, empaquetado y despliegue de un pipeline de entrega de software.
La integración de Applivery con Jenkins te permite subir automáticamente una nueva Build a Applivery al final de cada ejecución del pipeline, haciendo que los binarios recién compilados estén inmediatamente disponibles para los equipos de QA, las partes interesadas o los usuarios internos sin ningún paso manual.
Applivery no tiene un plugin dedicado para Jenkins. La integración usa el plugin HTTP Request estándar de Jenkins para llamar directamente a la API de subida de Applivery. Este enfoque es más sencillo, más fácil de mantener y funciona con cualquier versión de Jenkins.
Requisitos previos
Antes de configurar la integración, asegúrate de tener:
- Una instancia de Jenkins con el plugin HTTP Request instalado.
- Un App API Token de Applivery. Encuéntralo en Ajustes de la App → Token API en el panel de Applivery, o consulta Integration API Token para instrucciones sobre cómo crearlo.
- Un pipeline de Jenkins que genere un artefacto de Build (
.ipa,.apk,.aabu otro formato compatible).
Nunca escribas tu token de Applivery directamente en el Jenkinsfile. Guárdalo como credencial secreta en Jenkins y referencíala mediante una variable de entorno.
- Ve a Jenkins → Manage Jenkins → Credentials.
- Añade una nueva credencial de tipo Secret text.
- Establece el ID como
APPLIVERY_TOKEN(o cualquier nombre que prefieras; úsalo de forma consistente). - Pega tu App API Token de Applivery como valor secreto.
En tu Jenkinsfile, expón la credencial como variable de entorno:
environment {
APPLIVERY_TOKEN = credentials('APPLIVERY_TOKEN')
}
Añade una etapa Applivery Upload después de tu paso de compilación. La etapa usa el paso httpRequest del plugin HTTP Request para llamar a la API de subida de Applivery con multipart/form-data.
stage('Applivery Upload') {
def response = httpRequest(
url: 'https://upload.applivery.io/v1/integrations/builds',
httpMode: 'POST',
consoleLogResponseBody: true,
wrapAsMultipart: true,
customHeaders: [
[
maskValue: true,
name: 'Authorization',
value: "Bearer ${env.APPLIVERY_TOKEN}"
]
],
formData: [
// Archivo de Build
[
name: 'build',
fileName: 'app.ipa',
uploadFile: './app.ipa',
contentType: 'application/octet-stream'
],
// Metadatos de la Build
[name: 'versionName', value: "${env.BUILD_TAG}"],
[name: 'changelog', value: "${env.GIT_COMMIT_MSG}"],
[name: 'tags', value: 'jenkins, ci'],
// Notificaciones
[name: 'notifyCollaborators', value: 'true'],
[name: 'notifyEmployees', value: 'false'],
[name: 'notifyMessage', value: 'Nueva Build disponible desde Jenkins'],
[name: 'notifyLanguage', value: 'es'],
// Filtro de grupo de notificación (opcional)
// Para notificar a usuarios en group1 Y group2, O group3:
[name: 'filter[0][0]', value: 'group1'],
[name: 'filter[0][1]', value: 'group2'],
[name: 'filter[1][0]', value: 'group3'],
// Metadatos CI/CD — aparecen en el panel de Applivery
[name: 'deployer.name', value: 'Jenkins'],
[name: 'deployer.info.commitMessage', value: "${env.GIT_COMMIT_MSG}"],
[name: 'deployer.info.commit', value: "${env.GIT_COMMIT}"],
[name: 'deployer.info.branch', value: "${env.GIT_BRANCH}"],
[name: 'deployer.info.buildUrl', value: "${env.BUILD_URL}"],
[name: 'deployer.info.buildNumber', value: "${env.BUILD_NUMBER}"],
[name: 'deployer.info.repositoryUrl', value: "${env.GIT_URL}"]
]
)
echo "Respuesta de subida a Applivery: ${response}"
}
Ejemplo completo de Jenkinsfile
Aquí tienes un ejemplo completo de pipeline para una Build iOS:
pipeline {
agent any
environment {
APPLIVERY_TOKEN = credentials('APPLIVERY_TOKEN')
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
// Reemplaza con tu comando de compilación real
sh 'xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive'
sh 'xcodebuild -exportArchive -archivePath build/MyApp.xcarchive -exportPath build/ -exportOptionsPlist ExportOptions.plist'
}
}
stage('Applivery Upload') {
steps {
script {
def response = httpRequest(
url: 'https://upload.applivery.io/v1/integrations/builds',
httpMode: 'POST',
consoleLogResponseBody: true,
wrapAsMultipart: true,
customHeaders: [
[
maskValue: true,
name: 'Authorization',
value: "Bearer ${env.APPLIVERY_TOKEN}"
]
],
formData: [
[
name: 'build',
fileName: 'MyApp.ipa',
uploadFile: './build/MyApp.ipa',
contentType: 'application/octet-stream'
],
[name: 'versionName', value: "${env.BUILD_TAG}"],
[name: 'changelog', value: "Build #${env.BUILD_NUMBER} — ${env.GIT_BRANCH}"],
[name: 'notifyCollaborators', value: 'true'],
[name: 'notifyMessage', value: 'Nueva Build lista para pruebas'],
[name: 'notifyLanguage', value: 'es'],
[name: 'deployer.name', value: 'Jenkins'],
[name: 'deployer.info.commit', value: "${env.GIT_COMMIT}"],
[name: 'deployer.info.branch', value: "${env.GIT_BRANCH}"],
[name: 'deployer.info.commitMessage', value: "${env.GIT_COMMIT_MSG}"],
[name: 'deployer.info.buildUrl', value: "${env.BUILD_URL}"],
[name: 'deployer.info.buildNumber', value: "${env.BUILD_NUMBER}"],
[name: 'deployer.info.repositoryUrl', value: "${env.GIT_URL}"]
]
)
echo "Respuesta de subida a Applivery: ${response}"
}
}
}
}
post {
failure {
echo 'La compilación o la subida han fallado.'
}
}
}
Referencia de parámetros clave
El array formData se corresponde directamente con los parámetros de la API de subida de Applivery. Los más utilizados:
| Parámetro | Descripción |
|---|---|
build |
El archivo binario a subir. Usa uploadFile para la ruta local y fileName para el nombre que Applivery registrará. |
versionName |
Etiqueta legible para la Build. Usar ${env.BUILD_TAG} o ${env.BUILD_NUMBER} facilita su trazabilidad en Applivery. |
changelog |
Notas de la versión mostradas en el panel de Applivery y en los emails de notificación. |
tags |
Etiquetas separadas por comas para filtrar Builds. Por ejemplo: jenkins, staging. |
notifyCollaborators |
Establece como true para enviar un email a los Colaboradores de la App cuando se suba la Build. |
notifyEmployees |
Establece como true para enviar un email a los empleados de la tienda. |
notifyMessage |
Mensaje personalizado incluido en el email de notificación. |
notifyLanguage |
Idioma del email de notificación. Valores admitidos: en, es, fr, de, it, zh, pt, ru. |
filter[N][M] |
Filtro de notificación por grupos. Cada array interno es una cláusula AND; cada índice externo es un OR. |
deployer.name |
Nombre de la plataforma CI mostrado en el panel de Applivery. Por ejemplo: Jenkins. |
deployer.info.commit |
SHA del commit de Git. |
deployer.info.branch |
Nombre de la rama de Git. |
deployer.info.buildNumber |
Número de Build de Jenkins. |
deployer.info.buildUrl |
URL directa a la ejecución de Build en Jenkins. |
deployer.info.repositoryUrl |
URL del repositorio de origen. |
Para la referencia completa de parámetros, consulta POST – Subir una Build.
Variables de entorno de Jenkins
Los ejemplos de pipeline anteriores usan variables de entorno integradas de Jenkins, disponibles en cualquier pipeline sin configuración adicional:
| Variable | Descripción |
|---|---|
BUILD_NUMBER |
El número de Build actual. |
BUILD_TAG |
Cadena con el formato jenkins-<job>-<número>. Útil como nombre de versión. |
BUILD_URL |
URL completa a la Build actual en la interfaz de Jenkins. |
GIT_COMMIT |
SHA del commit de Git actual (requiere el plugin de Git). |
GIT_BRANCH |
Nombre de la rama de Git actual (requiere el plugin de Git). |
GIT_URL |
URL del repositorio de Git (requiere el plugin de Git). |
GIT_COMMIT_MSG no es una variable integrada de Jenkins. Para usar el mensaje de commit en la subida, captúralo primero con un paso de shell:
env.GIT_COMMIT_MSG = sh(script: 'git log -1 --pretty=%B', returnStdout: true).trim()