"Well, go for it!" or CI / CD mobile applications based on contract

Hello! My name is Dmitry, I am a release engineer in the Avito CI / CD Speed ​​team. For several years now, my colleagues and I have been responsible for everything related to the releases of our mobile applications and not only. Aleksey Shpirko spoke in great detail about our "release trains" and how we went about it .



But we are not standing still and today we will try to tell you how our CI / CD system has evolved from a set of scripts and TeamCity-builds into a full-fledged mobile release service that allows you to manage the entire application release process through a convenient interface.





A bit of context



Avito mobile application is:



  • Dozens of product teams.
  • 20+ developers for each platform.
  • Thousands of UI tests.
  • Tens of thousands of UNIT tests.
  • Hundreds of thousands of lines of code.
  • Android weekly releases.
  • IOS releases every two weeks.


The release process consists of the following parts:



  1. Slice the release branch from develop and tagging it in git.
  2. Run all automatic code checks and run all kinds of tests.
  3. Build a release candidate.
  4. Uploading the release candidate to AppStore / GooglePlay and internal storage of artifacts.
  5. Sending the necessary information to monitoring systems.
  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