Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

Врям, здравствуйтС!

Π₯ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ своём ΠΎΠΏΡ‹Ρ‚Π΅ настройки ΠΈΠ½Ρ‚Π΅Ρ€Π³Π°Ρ†ΠΈΠΈ GitLab ΠΈ AppCenter Ρ‡Π΅Ρ€Π΅Π· BitBucket.

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π² Ρ…ΠΎΠ΄Π΅ настройки автоматичСского запуска UI тСстов для кроссплатформСнного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Xamarin. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ!

* Об Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ UI тСстирования Π² условиях кроссплатформСнности сдСлаю ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Ссли ΠΏΡƒΠ±Π»ΠΈΠΊΠ° заинтСрСсуСтся.

Подобного ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π½Π°Ρ€Ρ‹Π»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ моя ΡΡ‚Π°Ρ‚ΡŒΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Π—Π°Π΄Π°Ρ‡Π°: ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ автоматичСский запуск UI тСстов Π½Π° AppCenter ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ наша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ GitLab ΠΊΠ°ΠΊ систСму контроля вСрсий.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° оказалась Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ AppCenter Π½Π΅ интСргируСтся с GitLab Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Как ΠΎΠ΄ΠΈΠ½ΠΎ ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ ΠΎΠ±Ρ…ΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· BitBucket.

Π¨Π°Π³ΠΈ

1. Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ пустой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° BitBucket

НС Π²ΠΈΠΆΡƒ нСобходимости ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ πŸ™‚

2. НастраиваСм GitLab

Нам Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ push/merge Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ измСнСния заливались Π΅Ρ‰Π΅ ΠΈ Π½Π° BitBucket. Для этого добавляСм runner(ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ .gitlab-ci.yml Ρ„Π°ΠΉΠ»).

CΠ½Π°Ρ‡Π°Π»Π° добавляСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ before_scripts

 - git config --global user.email "user@email"
 - git config --global user.name "username"

ΠŸΠΎΡ‚ΠΎΠΌ добавляСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ stage:

- git push --mirror https://username:[email protected]/username/projectname.git

Π’ ΠΌΠΎΡ‘ΠΌ случаС получился Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ»

before_script:
 - git config --global user.email "user@email"
 - git config --global user.name "username"

stages:
  - mirror
mirror:
  stage: mirror
  script:
    - git push --mirror https://****:*****@bitbucket.org/****/testapp.git

ЗапускаСм Π±ΠΈΠ»Π΄, провСряСм, Ρ‡Ρ‚ΠΎ Π½Π° BitBucket Π»Π΅Π³Π»ΠΈ наши измСнСния/Ρ„Π°ΠΉΠ»Ρ‹.
* ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π»Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, настройка SSH ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°. Но, Π½Π° всякий случай, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ настройки соСдинСния ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· SSH Π½ΠΈΠΆΠ΅

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· SSH

Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ SSH ΠΊΠ»ΡŽΡ‡. Об этом написано мноТСство статСй. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚.
Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ выглядят ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:
Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

Π”Π°Π»Π΅Π΅ сСкрСтный ΠΊΠ»ΡŽΡ‡ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π° GitLab. Для этого ΠΈΠ΄Π΅ΠΌ Π² Settings > CI/CD > Enviroment Variables. ДобавляСм ВБЁ содСрТимоС Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ сохранили сСкрСтный ΠΊΠ»ΡŽΡ‡. Назовём ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ SSH_PRIVATE_KEY.
* этот Ρ„Π°ΠΉΠ», Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„Π°ΠΉΠ»Π° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΌ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ
Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, дальшС Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π½Π° BitBucket. Для этого ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² Settings > Access Keys.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

Π’ΡƒΡ‚ Π½Π°ΠΆΠΈΠ²Π°Π΅ΠΌ Add Key ΠΈ вставляСм содСрТимоС Ρ„Π°ΠΉΠ»Π° с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΌ (Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .pub).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π±ΡƒΠ΄Π΅Ρ‚ использованиС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² gitlab-runner. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ вмСсто Π·Π²Ρ‘Π·Π΄ΠΎΡ‡Π΅ΠΊ свои Π΄Π°Π½Π½Ρ‹Π΅

image: timbru31/node-alpine-git:latest

stages:
  - mirror

before_script:
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts
  - git config --global user.email "*****@***"
  - git config --global user.name "****"
  - ssh -T [email protected]

mirror:
  stage: mirror
  script:
    - git push --mirror https://****:****@bitbucket.org/*****/*****.git

3. Настройка AppCenter

Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° AppCenter.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ язык/ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

Π”Π°Π»Π΅Π΅ Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ Build Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданного прилоТСния. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Ρ‚Π°ΠΌ BitBucket ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, созданный Π½Π° этапС 1.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±ΠΈΠ»Π΄. Для этого Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠΊΠΎΠ½ΠΊΡƒ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΠΈ

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Ρ‚Π°ΠΌ всё ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятно. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. ΠŸΡ€ΠΈ нСобходимости Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ запуск тСстов послС Π±ΠΈΠ»Π΄Π°. Они Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ автоматичСски.

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π½Π° этом всё. Π—Π²ΡƒΡ‡ΠΈΡ‚ нСслоТно, Π½ΠΎ, СстСствСнно, Π³Π»Π°Π΄ΠΊΠΎ всё Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠΏΠΈΡˆΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ошибки, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»Π°ΡΡŒ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹:

‘ssh-keygen’ is not recognized as an internal or external command.

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈ-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΊ ssh-keygen.exe Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния.
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π΄Π²Π°: Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ C:Program FilesGitusrbin Π² Enviroment Variables (примСнится послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹), ΠΈΠ»ΠΈ запускайтС консоль ΠΈΠ· этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.

AppCenter ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ Π½Π΅ ΠΊ Ρ‚ΠΎΠΌΡƒ BitBucket Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρƒ?

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π²ΡΠ·Π°Ρ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ BitBucket ΠΎΡ‚ AppCenter. Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ BitBucket Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚, ΠΈΠ΄Π΅ΠΌ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

Π”Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² Settings > Access Management > OAuth

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

НаТимаСм Revoke, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²ΡΠ·Π°Ρ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

ПослС этого Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄ Π½ΡƒΠΆΠ½Ρ‹ΠΌ BitBucket Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠΌ
* Π’ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС Π΅Ρ‰Π΅ ΠΈ ΠΏΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ кэш Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² AppCenter. ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ Build, Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Disconnect BitBucket account

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ AppCenter ΠΈ GitLab

Когда старый Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ отвязан, привязываСм AppCenter Π·Π°Π½ΠΎΠ²ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρƒ.

‘eval’ is not recognized as an internal or external command

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ вмСсто ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

  - eval $(ssh-agent -s)

ΠšΠΎΠΌΠ°Π½Π΄Ρƒ:

  - ssh-agent

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях придётся ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ C:Program FilesGitusrbinssh-agent.exe, ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ этот ΠΏΡƒΡ‚ΡŒ Π² систСмныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° машинС, Π³Π΄Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ runner

AppCenter Build пытаСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΈΠ»Π΄ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ· Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ bitBucket рСпозитория

Π’ ΠΌΠΎΡ‘ΠΌ случаС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° с нСсколькими Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°ΠΌΠΈ. РСшилась очисткой кэша.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com