"Bem, vá em frente!" ou aplicativos móveis CI / CD baseados em contrato

Olá! Meu nome é Dmitry, sou engenheiro de lançamento da equipe Avito CI / CD Speed. Há vários anos, meus colegas e eu somos responsáveis ​​por tudo relacionado aos lançamentos de nossos aplicativos móveis e não só. Aleksey Shpirko falou detalhadamente sobre nossos "trens de lançamento" e como o fizemos .



Mas não estamos parados e hoje vamos tentar dizer como nosso sistema de CI / CD evoluiu de um conjunto de scripts e compilações TeamCity para um serviço de lançamento móvel completo que permite gerenciar todo o processo de lançamento do aplicativo por meio de uma interface conveniente.





Um pouco de contexto



O aplicativo móvel Avito é:



  • Dezenas de equipes de produto.
  • Mais de 20 desenvolvedores para cada plataforma.
  • Milhares de testes de IU.
  • Dezenas de milhares de testes UNIT.
  • Centenas de milhares de linhas de código.
  • Lançamentos semanais do Android.
  • IOS é lançado a cada duas semanas.


O processo de liberação consiste nas seguintes partes:



  1. Corte o branch de lançamento do desenvolvimento e marque-o no git.
  2. Execute todas as verificações automáticas de código e todos os tipos de testes.
  3. Crie um candidato a lançamento.
  4. Upload do candidato a lançamento para AppStore / GooglePlay e armazenamento interno de artefatos.
  5. Envio das informações necessárias aos sistemas de monitoramento.
  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