AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рдЯреНрд░рд╛рдпрдо, рд╣реЕрд▓реЛ!

BitBucket рджреНрд╡рд╛рд░реЗ GitLab рдЖрдгрд┐ AppCenter рдПрдХрддреНрд░реАрдХрд░рдг рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рдЭреНрдпрд╛ рдЕрдиреБрднрд╡рд╛рдмрджреНрджрд▓ рдореА рдмреЛрд▓реВ рдЗрдЪреНрдЫрд┐рддреЛ.

Xamarin рд╡рд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА UI рдЪрд╛рдЪрдгреНрдпрд╛рдВрдЪреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд▓реЙрдиреНрдЪ рд╕реЗрдЯ рдХрд░рддрд╛рдирд╛ рдЕрд╢рд╛ рдПрдХрддреНрд░реАрдХрд░рдгрд╛рдЪреА рдЧрд░рдЬ рдирд┐рд░реНрдорд╛рдг рдЭрд╛рд▓реА. рдХрдЯ рдЦрд╛рд▓реА рддрдкрд╢реАрд▓рд╡рд╛рд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓!

* рдЬрд░ рд▓реЛрдХрд╛рдВрдирд╛ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕реЗрд▓ рддрд░ рдореА рдХреНрд░реЙрд╕-рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдордзреНрдпреЗ UI рдЪрд╛рдЪрдгреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд▓реЗрдЦ рддрдпрд╛рд░ рдХрд░реЗрди.

рдореА рдлрдХреНрдд рдЕрд╢реА рдПрдХ рд╕рд╛рдордЧреНрд░реА рдЦреЛрджрд▓реА рдПрдХ рд▓реЗрдЦ. рдореНрд╣рдгреВрди, рдорд╛рдЭрд╛ рд▓реЗрдЦ рдПрдЦрд╛рджреНрдпрд╛рд╕ рдорджрдд рдХрд░реЗрд▓.

рдЙрджреНрджрд┐рд╖реНрдЯ: рдЖрдордЪрд╛ рдХрд╛рд░реНрдпрд╕рдВрдШ GitLab рдЖрд╡реГрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рдд рдЕрд╕рддрд╛рдирд╛, AppCenter рд╡рд░ UI рдЪрд╛рдЪрдгреНрдпрд╛рдВрдЪреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд▓рд╛рдБрдЪ рд╕реЗрдЯ рдХрд░рд╛.

рд╕рдорд╕реНрдпрд╛ рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА AppCenter рдереЗрдЯ GitLab рд╕рд╣ рд╕рдорд╛рдХрд▓рд┐рдд рд╣реЛрдд рдирд╛рд╣реА. BitBucket рдорд╛рд░реНрдЧреЗ рдмрд╛рдпрдкрд╛рд╕ рд╣рд╛ рдЙрдкрд╛рдпрд╛рдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгреВрди рдирд┐рд╡рдбрд▓рд╛ рдЧреЗрд▓рд╛.

рдкрд╛рдпрд▒реНрдпрд╛

1. BitBucket рд╡рд░ рд░рд┐рдХреНрдд рднрд╛рдВрдбрд╛рд░ рддрдпрд╛рд░ рдХрд░рд╛

рдпрд╛рдЪреЗ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдорд▓рд╛ рджрд┐рд╕рдд рдирд╛рд╣реА :)

2. GitLab рд╕реЗрдЯ рдХрд░рдгреЗ

рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдврдХрд▓рддрд╛рдирд╛/рд╡рд┐рд▓реАрди рдХрд░рддрд╛рдирд╛, рдмрджрд▓ рдмрд┐рдЯрдмрдХреЗрдЯрд╡рд░ рджреЗрдЦреАрд▓ рдЕрдкрд▓реЛрдб рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд░рдирд░ рдЬреЛрдбрд╛ (рдХрд┐рдВрд╡рд╛ рд╡рд┐рджреНрдпрдорд╛рди .gitlab-ci.yml рдлрд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рд╛).

рдкреНрд░рдердо рдЖрдкрдг before_scripts рд╡рд┐рднрд╛рдЧрд╛рдд рдХрдорд╛рдВрдбреНрд╕ рдЬреЛрдбрддреЛ

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

рдирдВрддрд░ рдЗрдЪреНрдЫрд┐рдд рд╕реНрдЯреЗрдЬрд╡рд░ рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдЬреЛрдбрд╛:

- 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

рдЖрдореНрд╣реА рдмрд┐рд▓реНрдб рд▓рд╛рдБрдЪ рдХрд░рддреЛ, рдЖрдордЪреЗ рдмрджрд▓/рдлрд╛рдИрд▓реНрд╕ рдмрд┐рдЯрдмрдХреЗрдЯрд╡рд░ рдЖрд╣реЗрдд рдХрд╛ рддреЗ рддрдкрд╛рд╕рд╛.
* рд╕рд░рд╛рд╡ рджрд╛рдЦрд╡рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, SSH рдХреА рд╕реЗрдЯ рдХрд░рдгреЗ рдРрдЪреНрдЫрд┐рдХ рдЖрд╣реЗ. рдкрд░рдВрддреБ, рдлрдХреНрдд рдмрд╛рдмрддреАрдд, рдореА рдЦрд╛рд▓реА SSH рджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рджреЗрдИрди

SSH рджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдд рдЖрд╣реЗ

рдкреНрд░рдердо рддреБрдореНрд╣рд╛рд▓рд╛ SSH рдХреА рдЬрдирд░реЗрдЯ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рдпрд╛рдмрджреНрджрд▓ рдЕрдиреЗрдХ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдпреЗрдереЗ.
рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрд│рд╛ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рджрд┐рд╕рддрд╛рдд:
AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рдкреБрдвреАрд▓ рдЧреБрдкреНрдд рдХрд│ GitLab рд╡рд░ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдореНрд╣рдгреВрди рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕реЗрдЯрд┐рдВрдЧреНрдЬ > CI/CD > Environment Variables рд╡рд░ рдЬрд╛. рдЬреНрдпрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рддреБрдореНрд╣реА рдЧреБрдкреНрдд рдХреА рд╕реЗрд╡реНрд╣ рдХреЗрд▓реА рдЖрд╣реЗ рддреНрдпрд╛ рдлрд╛рдЗрд▓рдЪреА рд╕рд░реНрд╡ рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╛. рдЪрд▓рд╛ SSH_PRIVATE_KEY рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд▓рд╛ рдХреЙрд▓ рдХрд░реВрдпрд╛.
* рд╣реА рдлрд╛рдИрд▓, рдкрдмреНрд▓рд┐рдХ рдХреА рдлрд╛рдЗрд▓рдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд, рд╡рд┐рд╕реНрддрд╛рд░ рдирд╕реЗрд▓
AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рдЫрд╛рди, рдкреБрдвреЗ рддреБрдореНрд╣рд╛рд▓рд╛ BitBucket рдордзреНрдпреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреА рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рднрд╛рдВрдбрд╛рд░ рдЙрдШрдбрд╛ рдЖрдгрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ > рдкреНрд░рд╡реЗрд╢ рдХреА рд╡рд░ рдЬрд╛.

AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рдпреЗрдереЗ рдЖрдкрдг Add Key рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЛ рдЖрдгрд┐ рдкрдмреНрд▓рд┐рдХ рдХреА (рдПрдХреНрд╕рдЯреЗрдиреНрд╢рди .pub рд╕рд╣ рдлрд╛рдЗрд▓) рдлрд╛рдИрд▓рдордзреАрд▓ рдордЬрдХреВрд░ рдЯрд╛рдХрддреЛ.

рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рдЧрд┐рдЯрд▓реЕрдм-рд░рдирд░ рдордзреАрд▓ рдХреА рд╡рд╛рдкрд░рдгреЗ. рдпрд╛ рдЖрдЬреНрдЮрд╛ рд╡рд╛рдкрд░рд╛, рдкрд░рдВрддреБ рддреБрдордЪреНрдпрд╛ рддрдкрд╢реАрд▓рд╛рдВрд╕рд╣ рддрд╛рд░рдХрд╛ рдмрджрд▓рд╛

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 рдПрдХрддреНрд░реАрдХрд░рдг

рдкреБрдвреЗ, рдирд╡реНрдпрд╛рдиреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреНрдпрд╛ рдмрд┐рд▓реНрдб рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛. рддреЗрдереЗ рдЖрдореНрд╣реА BitBucket рдЖрдгрд┐ рдЪрд░рдг 1 рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рднрд╛рдВрдбрд╛рд░ рдирд┐рд╡рдбрддреЛ.

рдЫрд╛рди, рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЧрд┐рдпрд░ рдЪрд┐рдиреНрд╣ рд╢реЛрдзрд╛

AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рддрддреНрд╡рддрдГ, рддреЗрдереЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЕрдВрддрд░реНрдЬреНрдЮрд╛рдиреА рдЖрд╣реЗ. рдПрдХ рдкреНрд░рдХрд▓реНрдк рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдирд┐рд╡рдбрд╛. рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдмрд┐рд▓реНрдб рдирдВрддрд░ рдЪрд╛рдЪрдгреНрдпрд╛ рд╕реБрд░реВ рдХрд░рдгреЗ рд╕рдХреНрд╖рдо рдХрд░рд╛. рддреЗ рдЖрдкреЛрдЖрдк рд╕реБрд░реВ рд╣реЛрддреАрд▓.

рдореБрд│рд╛рдд, рддреЗ рд╕рд░реНрд╡ рдЖрд╣реЗ. рд╣реЗ рд╕реЛрдкреЗ рд╡рд╛рдЯрддреЗ, рдкрд░рдВрддреБ, рдиреИрд╕рд░реНрдЧрд┐рдХрд░рд┐рддреНрдпрд╛, рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕рд╣рдЬрддреЗрдиреЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА. рдореНрд╣рдгреВрди, рдореА рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдЖрдврд│рд▓реЗрд▓реНрдпрд╛ рдХрд╛рд╣реА рддреНрд░реБрдЯреАрдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░реЗрди:

'ssh-keygen' рд╣реА рдЕрдВрддрд░реНрдЧрдд рдХрд┐рдВрд╡рд╛ рдмрд╛рд╣реНрдп рдХрдорд╛рдВрдб рдореНрд╣рдгреВрди рдУрд│рдЦрд▓реА рдЬрд╛рдд рдирд╛рд╣реА.

рд╣реЗ рджреЗрдЦреАрд▓ рдЙрджреНрднрд╡рддреЗ рдХрд╛рд░рдг ssh-keygen.exe рдЪрд╛ рдорд╛рд░реНрдЧ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗрд▓рд╛ рдирд╛рд╣реА.
рджреЛрди рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд: C:Program FilesGitusrbin Environment Variables рдордзреНрдпреЗ рдЬреЛрдбрд╛ (рдорд╢реАрди рд░реАрдмреВрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓), рдХрд┐рдВрд╡рд╛ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреВрди рдХрдиреНрд╕реЛрд▓ рд▓рд╛рдБрдЪ рдХрд░рд╛.

AppCenter рдЪреБрдХреАрдЪреНрдпрд╛ BitBucket рдЦрд╛рддреНрдпрд╛рд╢реА рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ?

рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ AppCenter рд╡рд░реВрди рддреБрдордЪреЗ BitBucket рдЦрд╛рддреЗ рдЕрдирд▓рд┐рдВрдХ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рдЖрдореНрд╣реА рдЪреБрдХреАрдЪреНрдпрд╛ BitBucket рдЦрд╛рддреНрдпрд╛рдд рд▓реЙрдЧ рдЗрди рдХрд░рддреЛ рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд╡рд░ рдЬрд╛рддреЛ.

AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рдкреБрдвреЗ, рд╕реЗрдЯрд┐рдВрдЧреНрдЬ > рдкреНрд░рд╡реЗрд╢ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди > OAuth рд╡рд░ рдЬрд╛

AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рддреБрдордЪреЗ рдЦрд╛рддреЗ рдЕрдирд▓рд┐рдВрдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдорд╛рдЧреЗ рдШреНрдпрд╛ рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛.

AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рдпрд╛рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдЯрдмрдХреЗрдЯ рдЦрд╛рддреНрдпрд╛рд╕рд╣ рд▓реЙрдЧ рдЗрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
* рд╢реЗрд╡рдЯрдЪрд╛ рдЙрдкрд╛рдп рдореНрд╣рдгреВрди, рддреБрдордЪрд╛ рдмреНрд░рд╛рдЙрдЭрд░ рдХреЕрд╢реЗ рджреЗрдЦреАрд▓ рд╕рд╛рдл рдХрд░рд╛.

рдЖрддрд╛ AppCenter рд╡рд░ рдЬрд╛рдК. рдмрд┐рд▓реНрдб рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛, рдмрд┐рдЯрдмрдХреЗрдЯ рдЦрд╛рддреЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рд╛ рдХреНрд▓рд┐рдХ рдХрд░рд╛

AppCenter рдЖрдгрд┐ GitLab рдПрдХрддреНрд░реАрдХрд░рдг

рдЬреЗрд╡реНрд╣рд╛ рдЬреБрдиреЗ рдЦрд╛рддреЗ рдЕрдирд▓рд┐рдВрдХ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ AppCenter рд▓рд┐рдВрдХ рдХрд░рддреЛ. рдЖрддрд╛ рдЗрдЪреНрдЫрд┐рдд рдЦрд╛рддреНрдпрд╛рдХрдбреЗ.

'eval' рд╣реА рдЕрдВрддрд░реНрдЧрдд рдХрд┐рдВрд╡рд╛ рдмрд╛рд╣реНрдп рдЖрдЬреНрдЮрд╛ рдореНрд╣рдгреВрди рдУрд│рдЦрд▓реА рдЬрд╛рдд рдирд╛рд╣реА

рдЖрдореНрд╣реА рддреЗ рдХрдорд╛рдВрдбрдРрд╡рдЬреА рд╡рд╛рдкрд░рддреЛ

  - eval $(ssh-agent -s)

рд╕рдВрдШ:

  - ssh-agent

рдХрд╛рд╣реА рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХрддрд░ C:Program FilesGitusrbinssh-agent.exe рдЪрд╛ рдкреВрд░реНрдг рдорд╛рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓ рдХрд┐рдВрд╡рд╛ рд╣рд╛ рдорд╛рд░реНрдЧ рдЬреНрдпрд╛ рдорд╢реАрдирд╡рд░ рдзрд╛рд╡рдгрд╛рд░рд╛ рдЪрд╛рд▓рдд рдЕрд╕реЗрд▓ рддреНрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рдЬреЛрдбрд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓.

AppCenter рдмрд┐рд▓реНрдб рдХрд╛рд▓рдмрд╛рд╣реНрдп рдмрд┐рдЯрдмрдХреЗрдЯ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреВрди рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╕рд╛рдареА рдмрд┐рд▓реНрдб рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЗ

рдорд╛рдЭреНрдпрд╛ рдмрд╛рдмрддреАрдд, рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡рд▓реА рдХрд╛рд░рдг рдореА рдПрдХрд╛рдзрд┐рдХ рдЦрд╛рддреНрдпрд╛рдВрд╕рд╣ рдХрд╛рдо рдХрд░рдд рд╣реЛрддреЛ. рдореА рдХреЕрд╢реЗ рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛