"¡Bien, adelante!" o aplicaciones móviles CI / CD basadas en contrato

¡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:



  1. Corta la rama de lanzamiento del desarrollo y etiquétala en git.
  2. Ejecute todas las comprobaciones automáticas de código y ejecute todo tipo de pruebas.
  3. Crea un candidato de lanzamiento.
  4. Subiendo el candidato de lanzamiento a AppStore / GooglePlay y almacenamiento interno de artefactos.
  5. Envío de la información necesaria a los sistemas de seguimiento.
  6.   -.
  7. what's new  QA .
  8. Jira- — ,  , QA -.
  9.   -.
  10. .
  11.    .
  12.  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 .



  ?



  1. .
  2. ,   .
  3.   .
  4. , .
  5.   .


Nupokati —  .





  CD-  Python .

  CD- , CI,     .



 CD- — Release.





, , :





:





 , pipeline  .   ,   .



:







   













     





  CI CD    , .   .



, «  » , .       , -. , .




All Articles