¡Hola! Mi nombre es Dmitry, soy un ingeniero de lanzamiento en el equipo Avito CI / CD Speed. Desde hace varios años, mis compañeros y yo somos responsables de todo lo relacionado con los lanzamientos de nuestras aplicaciones móviles y no solo. Aleksey Shpirko habló con gran detalle sobre nuestros "trenes de liberación" y cómo lo hicimos .
Pero no nos quedamos quietos y hoy intentaremos decirle cómo nuestro sistema CI / CD ha evolucionado de un conjunto de scripts y TeamCity se integra en un servicio de lanzamiento móvil completo que le permite administrar todo el proceso de lanzamiento de la aplicación a través de una interfaz conveniente.
Un poco de contexto
La aplicación móvil Avito es:
- Docenas de equipos de producto.
- Más de 20 desarrolladores para cada plataforma.
- Miles de pruebas de IU.
- Decenas de miles de pruebas UNIT.
- Cientos de miles de líneas de código.
- Lanzamientos semanales de Android.
- Lanzamientos de IOS cada dos semanas.
El proceso de liberación consta de las siguientes partes:
- Corta la rama de lanzamiento del desarrollo y etiquétala en git.
- Ejecute todas las comprobaciones automáticas de código y ejecute todo tipo de pruebas.
- Crea un candidato de lanzamiento.
- Subiendo el candidato de lanzamiento a AppStore / GooglePlay y almacenamiento interno de artefactos.
- Envío de la información necesaria a los sistemas de seguimiento.
- -.
- what's new QA .
- Jira- — , , QA -.
- -.
- .
- .
- 100% .
2019 TeamCity-. cron TeamCity-, 1-9.
, - . , - , «» . .
.
1. TeamCity
. . .
TeamCity , :
- .
- .
- .
- « ».
-1 , -3 1 4, -7 , . , . .
.
2.
, . — CI/CD team Testing team. CD — . Testing team - — , .
, , ( , Jira-, , ) . , , , .
. , . .
3.
, . : , , -. , , : -, , , . Slack-, (Jira, Slack), -. « 100%?», « ?», « ?», « ?».
, , , , .
, , CI CD .
, .
CD:
- git;
- git;
- CI-;
- (Jira-, Release Notes);
- ;
- ;
- .
CI:
- ;
- ;
- - ;
- .
, . TeamCity .
, , CI CD. CD CI- , . , «--» . CI CD, «».
— JSON-, CD CI-, CI.
CD , , CI . CI , «» CD. .
config.json:
{
"schema_version": 1,
"project": "avito",
"release_version": "777.5",
"output_descriptor": {
"path":"http://artifactory.ru/releases/avito_android/777.5_1/output.json",
"skip_upload": false
},
"deployments": [
{
"type": "google-play",
"artifact_type": "bundle",
"build_variant": "release",
"track": "beta"
}
]
}
CI-, «» 777.5, , , output_descriptor, «», .
output.json:
{
"schema_version": 1,
"teamcity_build_url": "https://tmct.ru/viewLog.html?buildId=17317583",
"build_number": "777",
"release_version": "777.5",
"git_branch": {
"name": "release-avito/777.5",
"commit_hash": "2c54c50c220bf91bc1a6ca10b34f53a540c80551"
},
"test_results": {
"report_id": "5f3e94fd23d67bf434e5c1b8",
"report_url": "https://
tests.avito.ru/report/AvitoAndroid/FunctionalTests/2c54c50c220bf91",
"report_coordinates": {
"plan_slug": "AvitoAndroid",
"job_slug": "FunctionalTests",
"run_id": "2c54c50c220bf91"
}
},
"artifacts": [
{
"type": "apk",
"name": "avito-777.5-777-release.apk",
"uri": "http://example.com/artifactory/android/avito/777.5-777/avito-777.5-777-release.apk",
"build_variant": "release"
},
]
}
CI .
Nupokati:
. , . «» - .
TeamCity CD .
?
- .
- , .
- .
- , .
- .
Nupokati — .
CD- Python .
CD- , CI, .
CD- — Release
.
, , :
:
, pipeline . , .
:
CI CD , . .
, « » , . , -. , .