"Nah, lakukanlah!" atau aplikasi seluler CI / CD berdasarkan kontrak

Halo! Nama saya Dmitry, saya insinyur rilis di tim Kecepatan CI / CD Avito. Selama beberapa tahun, saya dan kolega saya telah bertanggung jawab atas segala hal yang berkaitan dengan rilis aplikasi seluler kami dan tidak hanya. Aleksey Shpirko berbicara dengan sangat rinci tentang "kereta pelepasliaran" kami dan bagaimana kami melakukannya .



Tetapi kami tidak tinggal diam dan hari ini kami akan mencoba memberi tahu Anda bagaimana sistem CI / CD kami telah berevolusi dari satu set skrip dan TeamCity-build menjadi layanan rilis seluler lengkap yang memungkinkan Anda mengelola seluruh proses rilis aplikasi melalui antarmuka yang nyaman.





Sedikit konteks



Aplikasi seluler Avito adalah:



  • Lusinan tim produk.
  • 20+ pengembang untuk setiap platform.
  • Ribuan pengujian UI.
  • Puluhan ribu tes UNIT.
  • Ratusan ribu baris kode.
  • Rilis mingguan Android.
  • IOS rilis setiap dua minggu.


Proses rilis terdiri dari bagian-bagian berikut:



  1. Potong cabang rilis dari develop dan beri tag di git.
  2. Jalankan semua pemeriksaan kode otomatis dan jalankan semua jenis pengujian.
  3. Buat kandidat rilis.
  4. Mengupload kandidat rilis ke AppStore / GooglePlay dan penyimpanan internal artefak.
  5. Mengirimkan informasi yang diperlukan ke sistem pemantauan.
  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