
Continuous Deployment áááş ááąáŹáˇááşáá˛ááşáá˝ááş áĄááťááŻá¸ááťááŻá¸ááąáŹ ááŻááşááąáŹááşááťááşááťáŹá¸ááᯠááťááşááźááşá ááąá¸áááşá¸áᏠááááąáŹááşá
á˝áŹ áĄááąáŹááşáĄáááşááąáŹáşáááş áĄááŻáśá¸ááźáŻáááˇáş ááąáŹáˇááşáá˛áá˝áśáˇááźááŻá¸áááŻá¸áááşááąá¸áá˝ááş áĄáá°á¸ááťááşá¸áááşáážáŻáá
áşááŻááźá
áşáááşá
áĄááá á
áááşáá°á¸áážáŹ developer ááž ááŻááşááťáąáŹááŻááşááŻááşááᯠáĄááŻáśá¸ááźáŻáá°ááś ááťááşááźááşá
á˝áŹ ááąá¸áááŻáˇáááŻááşá
áąáááˇáş ááŻáśááźááşá
áááşááťáááąáŹ áĄáááŻáĄááťáąáŹááş ááŻááşáááşá¸á
ááşááᯠáááşááŽá¸áááşááźá
áşáááşá áá
áşááťáááşáááşá¸áážáŹáááşá ááŻááşááŻááşáážáŻáĄáá˝ááş á
ááşáááşáááźááş áĄááźáąáŹááşá¸áĄáá˛ááťáŹá¸ ááźáŻááŻááşááŹá¸áááş - áááşá¸ááᯠá
ááşáááşáááźááş ááąá¸áááŻáˇáááŻááşáááŻááşá¸ (CD Pipeline) ááŻááąáŤáşáááşá
Skillbox ááž áĄááźáśááźáŻááŹá¸áááş- áááşáá˝áąáˇáááşáááşá¸ .
ááŤáááŻáˇáááşá¸áááŻáááááąá¸áááş "Habr" áá áŹáááşáá°áĄáŹá¸ááŻáśá¸áĄáá˝ááş - "Habr" ááááŻáááŻá¸áážááşá¸ááŻááşááᯠáĄááŻáśá¸ááźáŻá áááşáááˇáş Skillbox áááşáááşá¸áá˝ááşá áŹáááşá¸áá˝ááşá¸áááˇáşáĄá፠10 áá°áááşááťážáąáŹáˇá áťáąá¸á

á
áŽá¸áááşá¸áážáŻááᯠááááşá¸ááťáŻááşáááşá áĄáááźáąá¸áá˝áąáážááˇáş ááŻáśá¸ááĄááá˛áˇ áĄááŤáĄáááş ááťááşááźááˇáşááąáŹááááááŹááťáŹá¸ááᯠáááşááŻáśá¸áááŻááşáááşá á¤ááąáŹááşá¸ááŤá¸áááş ááááŻááááşááŹáááŻááşá¸áĄáá˝ááş áĄááŻáśá¸áááşáááŻááşáááˇáş developer ááťáŹá¸ááźáŹá¸áá˝ááş ááąáááşá¸áĄá
áŹá¸ááŻáśá¸ ááźáąáážááşá¸ááťááş ááŻáśá¸ááŻááᯠááąáŹáşááźááŹá¸ááŤáááşá
Jenkins
áĄááźááˇáşáĄá áááŻááşáááŻááşááŤáážáááąáŹ open source áĄáááŻáĄááťáąáŹááşá áá áş ááŹááŹá áááşááąáŹááşááźááşá¸á á ááşá¸áááşááźááşá¸á áááŻáˇááąáŹááşááźááşá¸ áááŻáˇáááŻááş ááąáŹáˇááşáá˛ááşááźááˇáşááťááşááźááşá¸áážááˇáş áááşáááŻááşáááˇáş áĄááŻááşáĄááťááŻá¸áĄá áŹá¸áĄáŹá¸ááŻáśá¸ááᯠáĄáááŻáĄááťáąáŹááşááŻááşááąáŹááşáááş áááşá¸áááş áĄááŻááşááŻááşáááťááŻá¸áááşáááşá
áĄáááşá¸ááŻáśá¸ PC áááŻáĄááşááťááşááťáŹá¸
- 256 MB RAM á áááŻááşááąáᏠ1 GB á
áĄááąáŹááşá¸ááŻáśá¸-
- 1 GB RAM á 50 GB ááŹáˇááşááááŻááşá
áĄááŻááşááŻááşáááşá Java Runtime Environment (JRE) ááŹá¸áážááşá¸ 8 áá˝ááş áĄáááŻááąáŹáˇááşáᲠáááŻáĄááşááŤáááşá
ááááŻááŹááᏠ(ááźááˇáşááąááŹá¸ááąáŹ áá˝ááşááźá°ááŹ) áááş á¤áá˛áˇáááŻáˇ ááźá
áşáááş-

Jenkins Server áááş GUI hosting áĄáá˝ááş ááŹáááşáážááááˇáşáĄááźááş áááşááąáŹááşáážáŻáá
áşááŻááŻáśá¸ááᯠá
áŻá
ááşá¸ááźááşá¸áážááˇáş ááŻááşááąáŹááşááźááşá¸áĄáá˝ááş ááŹáááşáá°áááˇáş áááşáááşáážáŻáá
áşááŻááźá
áşáááşá
Jenkins Node/Slave/Build Server - Master (master node) áááŻááşá áŹá¸ áááşááąáŹááşááźááşá¸ááŻááşáááşá¸ááᯠááŻááşááąáŹááşáááş configure ááŻááşáááŻááşááąáŹ á ááşáá ášá ááşá¸ááťáŹá¸á
Linux áĄáá˝ááş áááˇáşáá˝ááşá¸ááźááşá¸á
ááááŚá¸á á˝áŹ áááşáááş Jenkins repository ááᯠá áá áşáááŻáˇ áááˇáşáááş áááŻáĄááşáááş-
cd /tmp && wget -q -O â | sudo apt-key add - echo' deb áá˝á/' | sudo tee -a /etc/apt/sources.list.d/je
áááşááąáˇááťáşáááŻáážáąáŹááşáážáŻááᯠáĄááşááááşááŻááşááŤ-
sudo apt update áááŻ
Jenkins ááᯠáááˇáşáá˝ááşá¸ááŤ-
sudo apt jenkins ááᯠinstall ááŻááşááŤá
áááşá¸ááźáŽá¸ááąáŹááşá Jenkins áááş áá°áááşá¸ port 8080 áážáá áşáááˇáş á áá áşáá˝ááş ááááŻááşáááşááźá áşáááşá
ááŻááşááąáŹááşáááŻááşá á˝ááşá¸ááᯠá á áşááąá¸áááşá browser áá˝ááş ááááşá áŹáááŻáá˝ááˇáşáááş áááŻáĄááşáááşá :8080á áááŻáˇááąáŹááş á áá áşáááş root áĄááŻáśá¸ááźáŻáá°áĄáá˝ááş áááŚá¸ á ááŹá¸áážááşááᯠáááˇáşáá˝ááşá¸áááş áááˇáşáĄáŹá¸ áááááąá¸áááşááźá áşáááşá á¤á ááŹá¸áážááşáááş áááŻááş /var/lib/jenkins/secrets/initialAdminPassword áá˝ááş áááşáážááááşá
ááᯠáĄáŹá¸ááŻáśá¸áĄáááşáááˇáşááźá áşááŤááźáŽá áááşáááş CI/CD á áŽá¸áááşá¸áážáŻááťáŹá¸ááᯠá áááşáááŻááşááŤááźáŽá workbench á ááááşáá áş áĄááşááŹááąáˇá áşáááş á¤áá˛áˇáááŻáˇ ááźá áşáááş-


Jenkins áĄáŹá¸ááŹááťááşááťáŹá¸
- Master/Slave ááááŻááŹááž ááśáˇáááŻá¸ááąá¸ááąáŹ áĄáááŻááşá¸áĄááŹá
- REST XML/JSON API ááážááááŻááşáážáŻá
- plugins ááťáŹá¸áááťáąá¸áá°á¸ááźáąáŹááˇáş extensions áĄááťáŹá¸áĄááźáŹá¸áááŻááťáááşáááşáááŻááşáážáŻá
- áááşááźá˝ááźáŽá¸ áĄáááşáááźááş áááŻá¸áááşááąááąáŹ áĄáááŻááşá¸áĄáááŻááşá¸á
cons:
- áá˝á˛ááźááşá¸á áááşááźáŹáážáŻááááşáááŻáˇááźááşá¸ ááážáááŤá
- áĄáá˝ááşáĄááŻáśá¸ááźáŻááá˝ááşáá°ááąáŹ interface áááŻááşááŤá
TeamCity
JetBrains ááž á áŽá¸áá˝áŹá¸ááźá áşáá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻá ááŹááŹáááş áááŻá¸áážááşá¸ááąáŹ á áá áşáááˇáşáá˝ááşá¸áážáŻáážááˇáş áĄáá˝ááşááąáŹááşá¸áá˝ááşááąáŹ áĄááşááŹááąáˇá áşáááŻáˇááźááˇáş ááąáŹááşá¸áá˝ááşáááşá ááŻáśááąáá˝á˛áˇá ááşá¸ááŻáśáá˝ááş ááŻááşááąáŹááşááťááşááťáŹá¸ áĄááťáŹá¸áĄááźáŹá¸áážáááźáŽá¸ ááážááááŻááşááąáŹ ááááşáĄááşááťáŹá¸ áĄááąáĄáá˝ááşáááş áĄáááşáááźááş áááŻá¸ááŹááąáááşá
Java Runtime Environment (JRE) ááŹá¸áážááşá¸ 8 áááŻáĄááşáááşá
ááŹáᏠááŹáˇááşáᲠáááŻáĄááşááťááşááťáŹá¸áááş áĄááąá¸áááźáŽá¸ááŤá
- RAM - 3,2 GB;
- ááááŻáááşáᏠ- dual-core, 3,2 GHz;
- 1 Gb/s á á˝ááşá¸áááşáážáááąáŹ áááşáá˝ááşááąá¸áááşá¸ááźáąáŹááşá¸á
ááŹááŹáááş áááˇáşáĄáŹá¸ ááźááˇáşááŹá¸ááąáŹá á˝ááşá¸ááąáŹááşáááşááᯠááážááááş áá˝ááˇáşááźáŻáááş-
- áááşááąáŹááşáážáŻááŻáśá áś ááá ááŤááąáŹ áááąáŹááťááş ááá
- áááşááąáŹááşáážáŻáážááşáááşá¸áĄáá˝ááş 2 MB áá˝á˛ááąááąá¸ááźááşá¸á
- 50 áááşááąáŹááşáĄáąá¸ááťááˇáş;
- áááşááŹá¸áážááşá¸áá˝ááş áĄááŻáśá¸ááźáŻáá° 50 áážááˇáş IDE áá˝ááş áĄááŻáśá¸ááźáŻáá° 30 áááŻáˇáážááˇáş áá˝á˛ááŻááşáááŻááşááźááşá¸á
- ááźááşá VCS ááťáááşáááşáážáŻ 100á ááťáŹá¸ááąáŹáĄáŹá¸ááźááˇáş Perforce áážááˇáş áĄááťááşáĄáážáąáŹááˇáşááťáŹá¸á ááťááşá¸ááťážááźáąáŹááşá¸áá˛áážáŻáĄááťáááşáááş 120 á áášáááˇáşááźá áşáááşá
- áá áşááąáˇááťážááş ááźáŻááźááşáá˝ááşá¸ááśáážáŻ áá á ááťáąáŹáşá
- ááŹááŹáá áşááŻááąáŤáşáá˝ááşááąááŹááąáˇá áşáážááˇáşáĄáá°áĄááŻááşááŻááş;
- JVM ááŹáᏠááŻááşáááşá¸á ááş áááşáááşááťáŹá¸- -Xmx1100m -XX:MaxPermSize=120má
áááŻááşá áŹá¸áážááşáááŻáĄááşááťááşááťáŹá¸áááş áááşáááşááąááąáŹ á ááşá¸ááąá¸áá˝á˛ááťáŹá¸áĄááąáŤáş áĄááźáąááśááŹá¸áááşá ááŹááŹá áĄáááááŹáááşáážáŹ ááťáááşáááşááŹá¸ááąáŹ áĄáąá¸ááťááˇáşááťáŹá¸áĄáŹá¸ááŻáśá¸ááᯠá áąáŹááˇáşááźááˇáşáááşáážááˇáş áááŻááşáááşááŽááąáŹ áááŻáĄááşááťááşááťáŹá¸áĄááąáŤáş áĄááźáąááśá á¤áĄáąá¸ááťááˇáşááťáŹá¸áááŻáˇ áááşá¸á áŽááŹá¸ááąáŹ á ááşá¸ááąá¸áá˝á˛ááťáŹá¸ááᯠááźááˇáşááąáááşááźá áşááźáŽá¸ ááááşááťáŹá¸ááᯠáĄá áŽáááşááśááźááşá¸á áĄáąá¸ááťááˇáşááťáŹá¸áááş ááááşááąáŹááşá¸áĄááťááŻá¸ááťááŻá¸áážááˇáş áááşáááşáážáŻá áá áşááťáŹá¸áĄááźááş ááźááŻáááşááźááşáááşááŹá¸ááąáŹ áááşáááşá¸ááťááşáá áşááŻááźááˇáş ááŹááŤáááşá
áááşááąáŹááşáážáŻááááşááťáŹá¸áááŻááşáᏠáĄááťááşáĄáááşáĄáŹá¸ááŻáśá¸ááᯠááąááŹááąáˇá áşáá˝ááş ááááşá¸áááşá¸ááŹá¸áááşá áĄááááĄáŹá¸ááźááˇáş áááşá¸áááş áážááşáááşá¸áážááˇáş áĄááźáŹá¸áĄááŹá¸áá°ááąááŹá VCS áĄááźáąáŹááşá¸áĄáá˛ááťáŹá¸á áĄáąá¸ááťááˇáşááťáŹá¸á áááşá¸á áŽá áąáŹááˇáşáááŻááşá¸áážáŻááťáŹá¸á áĄááŻáśá¸ááźáŻáá°áĄááąáŹááˇáşááťáŹá¸áážááˇáş áá˝ááˇáşááźáŻááťááşááťáŹá¸ááźá áşáááşá ááąááŹááąáˇá áşáá˝ááş áááşááąáŹááşáážáŻáážááşáááşá¸ááťáŹá¸áážááˇáş áážáąá¸ááąáŹááşá¸áá ášá ááşá¸ááťáŹá¸áᏠáááŤáááşááŤá

Linux áĄáá˝ááş áááˇáşáá˝ááşá¸ááźááşá¸á
Tomcat ááŹááŹáá˝ááşááááşááŹááźááˇáş TeamCity ááᯠáááŻááşáááŻááşáááˇáşáá˝ááşá¸áááşá TeamCity áážááşáááşá¸ááᯠáĄááŻáśá¸ááźáŻáááˇáşáááş- TeamCity .tar.gzá ááąáŤááşá¸ááŻááşááŻááşááŤá .
tar -xfz TeamCity.tar.gz
/bin/runAllá sh [á áááş|áááşáááˇáş]
áááşá á ááťááşá¸áá˝ááşá á áŻá ááşá¸áážáŻááąááŹááᯠááááşá¸áááşá¸áááˇáş ááąááŹááąáˇá áşáĄááťááŻá¸áĄá áŹá¸ááᯠáááşáá˝áąá¸ááťááşáááş áááŻáĄááşáááşá

ááŻáśááąáá˝á˛áˇá
ááşá¸ááŻáśáááş áá˝ááˇáşáááşá :8111/ áá°ááŽááąáŹ PC ááąáŤáşáá˝ááş áážááşááŻáśáááşááŹá¸ááąáŹ áááşááąáŹááşáĄáąá¸ááťááˇáşáá
áşááŻáážááˇáşá
TeamCity á áĄáŹá¸ááŹááťááşááťáŹá¸
- áááŻá¸áážááşá¸ááąáŹáááşáááşáážáŻ;
- user-ááąáŹáşáá˝áą interface áááŻ;
- Built-in ááŻááşááąáŹááşááťááşáĄááťáŹá¸áĄááźáŹá¸;
- ááśáˇáááŻá¸áážáŻáááşááąáŹááşáážáŻ;
- RESTful API áážáááŤáááşá
- ááąáŹááşá¸áá˝ááşááąáŹá áŹáá˝ááşá áŹáááşá¸ááťáŹá¸;
- ááŻáśááźáŻáśááąá¸ááąáŹááşá¸áááşá
cons:
- áááˇáşáááşááąáŤááşá¸á ááşá¸áážáŻá
- áááşá¸áááş áĄáááąá¸ááááááŹáá áşááŻááźá áşáááşá
- ááąá¸áááşááąáŹáĄáááŻááşáĄáááşá¸áá áşáᯠ(áááŻáˇááąáŹáşááźáŽá¸áá˝áŹá¸ááŹáááş)á
GoCD
áááˇáşáá˝ááşá¸ááźááşá¸áážááˇáş áááşáááşááźááşá¸áĄáá˝ááş Java Runtime Environment (JRE) ááŹá¸áážááşá¸ 8 áááŻáĄááşáááˇáş áá˝ááˇáşáááşá¸áĄáááşá¸áĄááźá áşáááąáŹááťááşáá áşááŻá
System áááŻáááŻáĄááşááťááşááťáŹá¸áááŻ:
- RAM - 1 GB áĄááááˇáşááŻáśá¸á áááŻááąáŹááşá¸áááşá
- ááááŻáááşáᏠ- dual-coreá core ááźáááşáážáŻááşá¸ 2 GHz;
- hard drive - áĄáááşá¸ááŻáśá¸ ááąááŹáá˝ááş 1 GBá
áĄáąá¸ááťááˇáş-
- RAM - áĄáááşá¸ááŻáśá¸ 128 MBá áááŻááąáŹááşá¸áááşá
- ááááŻáááşáᏠ- áĄáááşá¸ááŻáśá¸ 2 GHz á
ááŹááŹáááş áĄáąá¸ááťááˇáşááťáŹá¸á ááŻááşááąáŹááşááťááşááᯠááąááťáŹá áąááźáŽá¸ áĄááŻáśá¸ááźáŻáá°áĄáá˝ááş áĄáááşááźáąááąáŹ ááťááşáážáŹááźááşááᯠááśáˇáááŻá¸ááąá¸áááş-

áĄáááˇáşááťáŹá¸/áĄááŻááşááťáŹá¸/áĄááŻááşááťáŹá¸-

Linux áĄáá˝ááş áááˇáşáá˝ááşá¸ááźááşá¸á
áá˛áˇáááşááś "deb /â | sudo tee /etc/apt/sources.list.d/gocd.list
ááśáááşááąáŹááşááąáŹááş | sudo apt-key add -
add-apt-repository ppa:openjdk-r/ppa
apt-get update áááŻ
apt-get install -y openjdk-8-jre
apt-get go-server ááᯠinstall ááŻááşááŤá
apt-get install go-agent
/etc/init.d/go-server [start|stop|status|restart]
/etc/init.d/go-agent [start|stop|status|restart]
ááŻáśáážááşáĄáŹá¸ááźááˇáş GoCd áááş áá˝ááˇáşáááşá : 8153 á
GoCd ááĄáŹá¸ááŹááťááşááťáŹá¸
- áá˝ááşáˇáááşá¸áĄáááşá¸áĄááźá áş;
- áááŻá¸áážááşá¸ááąáŹáááşáááşáážáŻáážááˇáşáá˝á˛áˇá ááşá¸áážáŻ;
- ááąáŹááşá¸áá˝ááşááąáŹá áŹáá˝ááşá áŹáááşá¸ááťáŹá¸;
- ááąáŹááşá¸áá˝ááşááąáŹáĄááŻáśá¸ááźáŻáá°áĄááşááŹááąáˇá áş-

- ááźááşáá˝ááşá¸áá áşááŻáááşá¸áá˝ááş GoCD ááźááˇáşááťááşáážáŻáááşá¸ááźáąáŹááşá¸ááᯠáĄáááˇáşáááˇáşááźááááŻááşáááş-

- áááŻááşáááŻááşá¸áááşááąáŹááşááŻáśá áĄááąáŹááşá¸ááŻáśá¸ááźááážáŻá

- GoCD áááş Dockerá AWS áĄááŤáĄáááş ááąáááşá¸áĄá áŹá¸ááŻáśá¸ cloud áááşáááşá¸ááťááşááťáŹá¸áá˝ááş CD áĄááŻááşáĄáá˝áŹá¸áĄááŹááᯠáĄááąáŹááşá¸ááŻáśá¸ááźá áşáĄáąáŹááş ááŻááşááąáŹááşáááşá
- áĄáááŻááŤááááááŹáááş áááááááşááž ááźááˇáşááťááşááźááşá¸áááŻáˇ áĄááťáááşáážááˇáşáááźáąá¸áᎠááźáąáŹááşá¸áá˛áážáŻáááŻááşá¸ááᯠááźáąááŹááśáááˇáş áááŻááşáááŻááşá¸áážá ááźáżááŹááťáŹá¸ááᯠááźáŻááźááşáááŻááşá áąáááşá
cons:
- áĄáááşá¸ááŻáśá¸ áĄáąá¸ááťááˇáşáá áşáŚá¸ áááŻáĄááşááŤáááşá
- ááźáŽá¸áá˝áŹá¸ááąáŹ áĄááŻááşááťáŹá¸áĄáŹá¸ááŻáśá¸ááᯠááźááááş áá˝ááşáááŻá¸ááş ááážáááŤá
- command áá áşááŻá áŽááᯠexecute ááŻááşáááşá pipeline configuration áĄáá˝ááş áĄááŻááşáá áşáᯠáááşááŽá¸áááş áááŻáĄááşááŤáááşá
- ááááşáĄááşááᯠáááˇáşáá˝ááşá¸áááş .jar áááŻááşááᯠáá˝ážáąáˇáááş áááŻáĄááşáááşá /plugins/ááźááşááážááˇáş ááŹááŹááᯠááźááşáááşá áááşááŤá
- áĄááąáŹáşááąá¸ááąá¸áááşáá˛áˇáĄáááŻááşá¸áĄáááŻááşá¸á
ááááŻáśá¸áĄááźá áş
á¤áĄááŹááťáŹá¸áááş ááááááŹááŻáśá¸ááťááŻá¸ááŹááźá áşááźáŽá¸á áĄáážááşááááşáá˝ááş ááąáŹááşáááşááťáŹá¸á á˝áŹáážáááąá¸áááşá áá˝áąá¸ááťááşáááşáááşáá˛ááąáŹááźáąáŹááˇáşá áááşáááşááąáŹááşáááşáážáŻááąáŹááˇáşááťáŹá¸áááŻááąááťáŹá á˝áŹáĄáŹááŻáśá ááŻááşáááşáááŻáĄááşáááşá
tool á open source code áááş áááşá¸áááŻááŹá¸áááşáááŻááşá áąáááˇáşáĄááźááş áĄááşášááŤáááşáĄáá áşááťáŹá¸ááᯠáááŻáááŻááźááşáááşá á˝áŹáááˇáşáá˝ááşá¸áááŻááşáááşá ááŤááąáááˇáş áá áşááŻááŻáĄáááşáááźáąáááş áááşáááŻááşáááŻááşáá˛áˇ áĄáááŻááşá¸áĄáááŻááşá¸áá˛áˇáĄáá°áĄááŽáááŻáᲠáĄáŹá¸áááŻá¸áááŤáááşá áĄáááźáąá¸áá˝áąááąá¸ááąáŹ ááááááŹááťáŹá¸áááş áá áşááŤáá áşááśáá˝ááş ááąáááşáááŻááşá¸ááźáŹá¸áááŻááşáááˇáş ááśáˇáááŻá¸áážáŻááąá¸áááşá
ááŻáśááźáŻáśááąá¸áááş áááˇáşáĄáá˝ááş ááááşáááşá¸áŚá¸á áŹá¸ááąá¸ááźá áşááŤáá áááşá¸áááş ááąáááśááááááŹáá áşááŻááźááˇáş ááŻááşááąáŹááşáááťááŻá¸áááşáááşá áááŻááşááŤá SaaS ááźáąáážááşá¸ááťááşááᯠáá˝áąá¸ááťááşááźááşá¸áááş ááąáŹááşá¸ááąáŹáá˝áąá¸ááťááşáážáŻááźá áşáááşá
ááąáŹááşááŻáśá¸áĄááąáážááˇáşá áĄáážááşááááşááááąáŹááşááąáŹ á ááşáááşáááźááş ááźááˇáşááťááşáážáŻááŻááşáááşá¸á ááşááᯠááąááťáŹá áąáááşáĄáá˝ááşá ááážááááŻááşááąáŹááááááŹááťáŹá¸á áĄáá˝áŹáĄááąá¸ááᯠááťááşá¸ááźáąáŹááşá¸áá˝áŹá¸á áąáááˇáş ááŽá¸ááźáŹá¸áááşáážááşááťááşááťáŹá¸ááᯠáááşáááşááŽá¸áááş áááŻáĄááşááŤáááşá
Skillbox ááž áĄááźáśááźáŻááŹá¸áááş-
- áážá áşáážá áşá áŹáááşáá˝áąáˇáááşáááşá¸ .
- áĄá˝ááşáááŻááşá¸áááşáááşá¸ .
- áááşáá˝áąáˇ áá áşáážá áşáááşáááşá¸ .
source: www.habr.com
