Un artifact (artefacto) es el resultado final de un proceso de compilación que puede desplegarse en un dispositivo destino o utilizarse como dependencia en otros proyectos. Los artefactos incluyen archivos APK e IPA de aplicaciones móviles, imágenes Docker, bibliotecas JAR/WAR y paquetes de instalación. Según el JFrog State of Software Supply Chain, 2025, las organizaciones pueden almacenar hasta 10 terabytes de artefactos en un solo registro, lo que hace que los sistemas de gestión de artefactos sean críticamente importantes.
Puntos clave
Un artifact (artefacto de compilación) es el resultado de compilar el código fuente, listo para el despliegue o su uso como dependencia. El proceso de compilación transforma los archivos fuente (Java, Kotlin, Swift, C++ y otros) en paquetes binarios que pueden ejecutarse en un dispositivo o servidor destino.
El concepto de artefacto va más allá de los archivos ejecutables. Por ejemplo, una biblioteca JAR es un artefacto utilizado como dependencia en otros proyectos. Una imagen Docker es un artefacto que contiene la aplicación y su entorno. Incluso un informe de cobertura de pruebas puede considerarse un artefacto en el contexto de CI/CD.
El desarrollo moderno en grandes empresas implica la gestión de cientos de miles de artefactos. Google DORA vincula la madurez de la gestión de artefactos con la eficacia general de DevOps: los equipos que utilizan registros de artefactos lanzan versiones más rápido y encuentran menos problemas de despliegue.
Cada artefacto pasa por varias etapas: creación (compilación), validación (pruebas, verificaciones de seguridad), almacenamiento (registro de artefactos), distribución (publicación para descarga) y archivado o eliminación (cuando la versión queda obsoleta).
Diferentes plataformas y tecnologías generan diferentes formatos de artefactos. Comprender los formatos es esencial para configurar correctamente el pipeline CI/CD y elegir un sistema de almacenamiento.
APK (Android Package Kit) es el formato tradicional de paquete de instalación. AAB (Android App Bundle) es un formato moderno para publicar en Google Play, que contiene solo los recursos necesarios para un dispositivo específico. AAB reduce el tamaño de la aplicación instalada en un promedio del 15-20% en comparación con un APK universal.
IPA (iOS App Store Package) es un archivo con código y recursos para dispositivos iOS. XCArchive es un artefacto intermedio creado por Xcode, a partir del cual se exporta el IPA final. dSYM es un archivo de símbolos de depuración necesario para la simbolización de registros de fallos.
| Plataforma | Formato | Extensión | Propósito |
|---|---|---|---|
| Android | APK | .apk | Paquete de instalación |
| Android | AAB | .aab | Publicación en Google Play |
| iOS | IPA | .ipa | Paquete de instalación |
| iOS | dSYM | .dSYM.zip | Símbolos de depuración |
| Flutter | Bundle | .zip, .tar.gz | Compilaciones Web/Desktop |
JAR (Java ARchive) — para bibliotecas Java/Kotlin. AAR (Android ARchive) — para bibliotecas Android con recursos. Imágenes Docker — artefactos contenedores para microservicios. Cada tipo tiene su propio registro y reglas de gestión de versiones.
Los artefactos son el vínculo entre las etapas del pipeline. Cada etapa consume artefactos de la anterior y produce otros nuevos. Comprender este flujo es fundamental para configurar un pipeline CI/CD eficaz.
Un flujo típico incluye: commit -> el servidor de compilación compila el código y crea un artefacto no optimizado -> el artefacto de prueba se utiliza para ejecutar pruebas -> en caso de éxito, se crea un artefacto de lanzamiento -> se firma y publica en el registro de artefactos -> el artefacto se obtiene del registro para el despliegue en staging y producción. Cada transición entre etapas va acompañada de una verificación de integridad y cumplimiento de requisitos.
El pipeline puede crear múltiples artefactos en diferentes etapas. Los artefactos de depuración contienen información de depuración, los no optimizados se compilan rápidamente para pruebas, los artefactos de lanzamiento son finales, con optimización y ofuscación. El sistema CI debe poder distinguirlos y aplicar políticas de retención adecuadas para cada tipo.
name: Artifact Flow
on: [push]
jobs:
build-debug:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew assembleDebug
- uses: actions/upload-artifact@v4
with:
name: debug-apk
path: app/build/outputs/apk/debug/app-debug.apk
retention-days: 7
test:
needs: build-debug
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: debug-apk
- run: ./gradlew testDebugUnitTest
build-release:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew assembleRelease
- uses: actions/upload-artifact@v4
with:
name: release-apk
path: app/build/outputs/apk/release/app-release.apk
retention-days: 90
Es importante distinguir entre la caché de dependencias y los artefactos de compilación. La caché (caché de Gradle, caché de CocoaPods) acelera las compilaciones repetidas pero no está destinada al despliegue. Los artefactos son el producto final, listo para su distribución. Establezca un TTL de varios días para la caché y de semanas o meses para los artefactos.
Los artefactos no deben almacenarse en el servidor de compilación; existen sistemas especializados para este fin. Un Repository Manager proporciona almacenamiento centralizado, indexación, control de acceso e integración con herramientas CI/CD.
JFrog Artifactory — un gestor universal que admite Maven, Gradle, Docker, NuGet, npm, APT, YUM. Sonatype Nexus — una alternativa de código abierto que admite los principales formatos. GitHub Packages — un registro integrado en GitHub, conveniente para equipos que ya usan GitHub. GitLab Container Registry — para imágenes Docker.
Factores clave: formatos admitidos, modelo de licencia (código abierto/empresarial), integración con CI/CD existente, capacidades de replicación entre regiones, disponibilidad de políticas de limpieza automática de versiones antiguas e informes de cumplimiento.
// Jenkins pipeline — publicación de APK en Artifactory
def server = Artifactory.newServer(
url: 'https://artifactory.company.com',
credentialsId: 'artifactory-api-key'
)
def uploadSpec = """
{
"files": [
{
"pattern": "app/build/outputs/apk/release/*.apk",
"target": "mobile-apps/android/release/""
}
]
}
"""
server.upload(uploadSpec)
Una estrategia adecuada de versionado de artefactos es fundamental para la reproducibilidad de las compilaciones y el seguimiento de cambios. Sin versionado, es imposible determinar qué versión del código causó un problema en producción.
El estándar MAJOR.MINOR.PATCH: MAJOR cambia con cambios incompatibles en la API, MINOR con adiciones de funcionalidad compatibles hacia atrás, PATCH con correcciones de errores compatibles hacia atrás. Para CI/CD, se añaden metadatos de compilación a la versión: 2.4.1+build.20260703.1. Esto permite determinar exactamente qué commit produjo un artefacto específico y cuándo se creó.
Cada artefacto debe contener metadatos sobre su origen: SHA del commit, número de compilación CI, nombre de la rama, fecha de compilación. Esta información se registra en el manifiesto del artefacto y permite reconstruir el contexto de su creación en cualquier momento. Sin trazabilidad, trabajar con artefactos se convierte en adivinar versiones, lo que es inaceptable para sistemas de producción con requisitos de auditoría.
Convención de nombre: {project}-{module}-{version}.{ext}. Por ejemplo: messaging-sdk-2.4.1.aar o app-release-2.4.1.apk. El servidor de compilación puede generar automáticamente una versión basada en una etiqueta Git o el número de compilación del sistema CI.
En los registros de artefactos Maven/Gradle se distinguen versiones de lanzamiento (fijas, inmutables) y versiones snapshot (desarrollo actual, pueden sobrescribirse). En los pipelines CI/CD, los artefactos snapshot son convenientes para el desarrollo, pero en producción solo deben usarse versiones de lanzamiento.
Los artefactos son un elemento clave de la cadena de suministro de software. El compromiso de un artefacto puede provocar la entrada de código malicioso en producción. La seguridad de los artefactos incluye varios niveles de protección.
Los archivos APK se firman con jarsigner o apksigner; los IPA se firman con un certificado de Apple; las imágenes Docker se firman con Content Trust (Notary) de Docker. La firma garantiza la integridad y confirma el autor del artefacto. El pipeline CI/CD debe incluir verificación de firmas de todas las dependencias de terceros.
Antes de la publicación, el artefacto se verifica con escáneres automatizados: Snyk, Trivy, Sonatype Nexus IQ, GitHub Dependabot. Analizan las dependencias incluidas, las versiones de las bibliotecas utilizadas y las vulnerabilidades CVE conocidas. Si se detecta una vulnerabilidad crítica, el lanzamiento se bloquea inmediatamente hasta que los desarrolladores la solucionen.
SLSA (Supply chain Levels for Software Artifacts) es un marco de seguridad que define niveles de confianza desde SLSA 1 (básico) hasta SLSA 4 (máximo). El servidor de compilación debe generar una attestación de procedencia: una declaración firmada criptográficamente sobre cómo y a partir de qué código se creó el artefacto.
Preguntas frecuentes
APK es un paquete universal con todos los recursos, mientras que AAB es un formato modular donde Google Play entrega solo los recursos necesarios para un dispositivo específico. AAB es de menor tamaño y Google lo recomienda para nuevas aplicaciones.
Preferiblemente en sistemas especializados (Artifactory, Nexus, GitHub Packages), en lugar de en un servidor CI o en un repositorio de código. Proporcionan versionado, control de acceso, integración con CI/CD y limpieza automática de versiones antiguas.
Sí, todos los artefactos destinados a uso en producción deben estar firmados. Para aplicaciones móviles, la firma es obligatoria para la instalación en dispositivos y la publicación en tiendas.
Use una etiqueta Git o el número de compilación del sistema CI. Genere automáticamente la versión con la plantilla MAJOR.MINOR.PATCH+build.N, donde N es el número de compilación CI secuencial o el SHA del commit.
Configure una política de limpieza automática: conserve las últimas 10-20 versiones de lanzamiento y 30-50 versiones snapshot. Las versiones antiguas se pueden archivar en almacenamiento en frío (S3 Glacier, Google Coldline) para cumplimiento normativo.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también