ΠΠΎΡΡΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»Π°Π½Π°ΠΊΠ° Π½Π° Π₯Π°Π±ΡΠ΅Ρ ΠΎ ΠΠ΅Π½ΠΊΠΈΠ½ΡΡ, Π°Π»ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΎΠΏΠΈΡΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡ ΠΠ΅Π½ΠΊΠΈΠ½Ρ ΠΈ Π΄ΠΎΡΠΊΠ΅Ρ Π°Π³Π΅Π½ΡΠΈ. Π‘Π²ΠΈ ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈ Π°Π»Π°ΡΠΈ Π·Π° ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ
ΠΠ°Π½Π°Ρ ΠΏΠΎΡΡΠΎΡΠΈ ΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ: ΠΠ΅Π½ΠΊΠΈΠ½Ρ 2 ΡΠ΅ ΠΎΠ΄Π»ΠΈΡΠ°Π½ Ρ ΡΠ°Π΄Ρ
ΠΠ°ΡΡΠΎ ΡΠ°ΠΌ ΠΏΠΎΡΠ΅ΠΎ Π΄Π° ΡΠ΅ΡΠ°Π²Π°ΠΌ ΠΎΠ²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ?
ΠΠΎΡΡΠΎ ΡΠΌΠΎ Ρ Π΄ΡΡΡΡΠ²Ρ
- Π²Π΅Π»ΠΈΠΊΠ° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° ΠΊΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ Π·Π°Π±ΠΎΡΠ°Π²ΡΠ°ΡΡ Π΄Π° ΠΎΡΠΈΡΡΠ΅;
- ΠΏΠΎΡΡΠΎΡΠ΅ ΡΡΠΊΠΎΠ±ΠΈ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ Π²Π΅ΡΠ·ΠΈΡΠ° ΠΈΡΡΠΎΠ³ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ°;
- Π‘Π²Π°ΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΡ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π°Π½ Π΄ΡΡΠ³Π°ΡΠΈΡΠΈ ΡΠΊΡΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ.
ΠΠΎΡΡΠΎΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, Π°Π»ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ ΠΌΠΈ Π΄Π° Π²Π°ΠΌ ΠΊΠ°ΠΆΠ΅ΠΌ Π½Π΅ΡΡΠΎ ΠΎ ΡΠ΅ΡΠ΅ΡΡ.
ΠΠ΅Π½ΠΊΠΈΠ½Ρ Ρ ΠΠΎΡΠΊΠ΅ΡΡ
ΠΠΎΡΡΠΎ ΡΠ΅ ΠΠΎΡΠΊΠ΅Ρ ΡΠ°Π΄Π° Π΄ΠΎΠ±ΡΠΎ ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ΅Π½ Ρ ΡΠ²Π΅ΡΡ ΡΠ°Π·Π²ΠΎΡΠ°, ΡΠΊΠΎΡΠΎ ΡΠ²Π΅ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΠΏΠΎΠΌΠΎΡΡ ΠΠΎΡΠΊΠ΅ΡΠ°. ΠΠΎΡΠ΅ ΡΠ΅ΡΠ΅ΡΠ΅ ΡΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌ ΠΠ΅Π½ΠΊΠΈΠ½ΡΠ° Ρ ΠΠΎΡΠΊΠ΅Ρ-Ρ ΠΈ Π΄Π° Π±ΡΠ΄Π΅ΠΌ Ρ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ Π΄Π° ΠΏΠΎΠΊΡΠ΅ΡΠ΅ΠΌ Π΄ΡΡΠ³Π΅ ΠΠΎΡΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅. ΠΠ²ΠΎ ΠΏΠΈΡΠ°ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ΅Π»ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ° ΡΠΎΡ 2013. Π³ΠΎΠ΄ΠΈΠ½Π΅ Ρ ΡΠ»Π°Π½ΠΊΡ β
Π£ΠΊΡΠ°ΡΠΊΠΎ, ΡΠ°ΠΌΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌ ΠΠΎΡΠΊΠ΅Ρ Ρ ΡΠ°Π΄Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ ΠΌΠΎΠ½ΡΠΈΡΠ°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ /var/run/docker.sock
.
ΠΠ²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΠΎΡΠΊΠ΅ΡΡΠΈΠ»Π΅-Π° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΠΎ Π·Π° ΠΠ΅Π½ΠΊΠΈΠ½ΡΠ°.
FROM jenkins/jenkins:lts
USER root
RUN apt-get update &&
apt-get -y install apt-transport-https
ca-certificates
curl
gnupg2
git
software-properties-common &&
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey &&
add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")
$(lsb_release -cs)
stable" &&
apt-get update &&
apt-get -y install docker-ce &&
usermod -aG docker jenkins
RUN curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
RUN apt-get clean autoclean && apt-get autoremove βyes && rm -rf /var/lib/{apt,dpkg,cache,log}/
USER jenkins
Π’Π°ΠΊΠΎ ΡΠΌΠΎ Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΠΠΎΡΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΊΠΎΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΠ°Π²Π° ΠΠΎΡΠΊΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½Π° Π³Π»Π°Π²Π½ΠΎΡ ΠΌΠ°ΡΠΈΠ½ΠΈ.
ΠΡΠΈΠ»Π΄ ΡΠ΅ΡΡΠΏ
ΠΠ΅ ΡΠ°ΠΊΠΎ Π΄Π°Π²Π½ΠΎ ΠΠ΅Π½ΠΊΠΈΠ½Ρ ΡΠ΅ Π΄ΠΎΠ±ΠΈΠΎ ΠΏΡΠΈΠ»ΠΈΠΊΡ Π΄Π° ΠΎΠΏΠΈΡΠ΅ ΡΠ²ΠΎΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ
ΠΠ°ΠΊΠ»Π΅, ΡΡΠ°Π²ΠΈΠΌΠΎ ΠΏΠΎΡΠ΅Π±Π°Π½ ΠΠΎΡΠΊΠ΅ΡΡΠΈΠ»Π΅ Ρ ΡΠ°ΠΌΠΎ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ΅, ΠΊΠΎΡΠΈ ΡΠ΅ ΡΠ°Π΄ΡΠΆΠ°ΡΠΈ ΡΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½Π΅ Π·Π° ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅. ΠΠ° ΠΎΠ²Π°Ρ Π½Π°ΡΠΈΠ½, ΡΠ°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΠΏΡΠ΅ΠΌΠΈ ΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠ²ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ ΠΈ Π½Π΅ΡΠ΅ ΠΌΠΎΡΠ°ΡΠΈ Π΄Π° ΡΡΠ°ΠΆΠΈ ΠΎΠ΄ ΠΠΠ‘-Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ ΠΠΎΠ΄Π΅.ΠΠ‘-Π° Π½Π° Ρ ΠΎΡΡΡ.
FROM node:12.10.0-alpine
RUN npm install yarn -g
ΠΠ²Π° ΡΠ»ΠΈΠΊΠ° ΠΈΠ·ΡΠ°Π΄Π΅ ΡΠ΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° Π²Π΅ΡΠΈΠ½Ρ ΠΠΎΠ΄Π΅.ΠΠ‘ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°. Π¨ΡΠ° Π°ΠΊΠΎ Π²Π°ΠΌ ΡΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠ΅Π±Π½Π° ΡΠ»ΠΈΠΊΠ° Π·Π° ΠΠΠ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ° ΡΠΊΡΡΡΠ΅Π½ΠΈΠΌ Π‘ΠΎΠ½Π°Ρ ΡΠΊΠ΅Π½Π΅ΡΠΎΠΌ? Π‘Π»ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π±ΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΊΠΎΡΠ΅ ΡΡ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±Π½Π΅ Π·Π° ΠΌΠΎΠ½ΡΠ°ΠΆΡ.
FROM adoptopenjdk/openjdk12:latest
RUN apt update
&& apt install -y
bash unzip wget
RUN mkdir -p /usr/local/sonarscanner
&& cd /usr/local/sonarscanner
&& wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
&& unzip sonar-scanner-cli-3.3.0.1492-linux.zip
&& mv sonar-scanner-3.3.0.1492-linux/* ./
&& rm sonar-scanner-cli-3.3.0.1492-linux.zip
&& rm -rf sonar-scanner-3.3.0.1492-linux
&& ln -s /usr/local/sonarscanner/bin/sonar-scanner /usr/local/bin/sonar-scanner
ENV PATH $PATH:/usr/local/sonarscanner/bin/
ENV SONAR_RUNNER_HOME /usr/local/sonarscanner/bin/
ΠΠΏΠΈΡΠ°Π»ΠΈ ΡΠΌΠΎ ΠΌΠΎΠ½ΡΠ°ΠΆΠ½ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅, Π°Π»ΠΈ ΠΊΠ°ΠΊΠ²Π΅ Π²Π΅Π·Π΅ ΠΠ΅Π½ΠΊΠΈΠ½Ρ ΠΈΠΌΠ° ΡΠ° ΡΠΈΠΌ? Π Π°Π³Π΅Π½ΡΠΈ ΠΠ΅Π½ΠΊΠΈΠ½ΡΠ° ΠΌΠΎΠ³Ρ Π΄Π° ΡΠ°Π΄Π΅ ΡΠ° ΡΠ°ΠΊΠ²ΠΈΠΌ ΠΠΎΡΠΊΠ΅Ρ ΡΠ»ΠΈΠΊΠ°ΠΌΠ° ΠΈ Π΄Π° ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ½ΠΎ Π³ΡΠ°Π΄Π΅.
stage("Build project") {
agent {
docker {
image "project-build:${DOCKER_IMAGE_BRANCH}"
args "-v ${PWD}:/usr/src/app -w /usr/src/app"
reuseNode true
label "build-image"
}
}
steps {
sh "yarn"
sh "yarn build"
}
}
Direktiva agent
ΠΊΠΎΡΠΈΡΡΠΈ ΠΈΠΌΠΎΠ²ΠΈΠ½Ρ docker
Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΠΈΡΠΈ:
- Π½Π°Π·ΠΈΠ² ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π·Π° ΡΠΊΠ»Π°ΠΏΠ°ΡΠ΅ ΠΏΡΠ΅ΠΌΠ° Π²Π°ΡΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΡΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΠ°;
- Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°Π΄ΡΡ, Π³Π΄Π΅ Ρ Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠ½ΡΠΈΡΠ°ΠΌΠΎ ΡΡΠ΅Π½ΡΡΠ½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠΌ ΠΊΠ°ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠΌ ΡΠ½ΡΡΠ°Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°.
Π Π²Π΅Ρ Ρ ΠΊΠΎΡΠ°ΡΠΈΠΌΠ° ΠΈΠ·Π³ΡΠ°Π΄ΡΠ΅ ΡΠΊΠ°Π·ΡΡΠ΅ΠΌΠΎ ΠΊΠΎΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΡΠ΅Π±Π° ΠΈΠ·Π²ΡΡΠΈΡΠΈ ΡΠ½ΡΡΠ°Ρ ΠΠΎΡΠΊΠ΅Ρ Π°Π³Π΅Π½ΡΠ° Π·Π° ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅. ΠΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ Π±ΠΈΠ»ΠΎ ΡΡΠ°, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ°ΠΊΠΎΡΠ΅ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ Π°Π½ΡΠΈΠ±Π»Π΅.
Π£ Π½Π°ΡΡΠ°Π²ΠΊΡ ΠΆΠ΅Π»ΠΈΠΌ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠΊΠΈ ΠΠ΅Π½ΠΊΠΈΠ½ΡΡΠΈΠ»Π΅ ΠΊΠΎΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΠΎΠ΄Π΅.ΠΠ‘ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.
def DOCKER_IMAGE_BRANCH = ""
def GIT_COMMIT_HASH = ""
pipeline {
options {
buildDiscarder(
logRotator(
artifactDaysToKeepStr: "",
artifactNumToKeepStr: "",
daysToKeepStr: "",
numToKeepStr: "10"
)
)
disableConcurrentBuilds()
}
agent any
stages {
stage("Prepare build image") {
steps {
sh "docker build -f Dockerfile.build . -t project-build:${DOCKER_IMAGE_BRANCH}"
}
}
stage("Build project") {
agent {
docker {
image "project-build:${DOCKER_IMAGE_BRANCH}"
args "-v ${PWD}:/usr/src/app -w /usr/src/app"
reuseNode true
label "build-image"
}
}
steps {
sh "yarn"
sh "yarn build"
}
}
post {
always {
step([$class: "WsCleanup"])
cleanWs()
}
}
}
Π¨ΡΠ° ΡΠ΅ Π΄Π΅ΡΠΈΠ»ΠΎ?
ΠΠ°Ρ Π²Π°ΡΡΡΡΡΠΈ ΠΎΠ²ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠΌΠΎ ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅:
- Π²ΡΠ΅ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΌΠΎΠ½ΡΠ°ΠΆΠ΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ° ΡΠ΅ ΡΠΌΠ°ΡΠ΅Π½ΠΎ Π½Π° 10 - 15 ΠΌΠΈΠ½ΡΡΠ° ΠΏΠΎ ΠΏΡΠΎΡΠ΅ΠΊΡΡ;
- ΠΏΠΎΡΠΏΡΠ½ΠΎ ΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠ²ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ Π·Π° ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, ΠΏΠΎΡΡΠΎ Π³Π° Π½Π° ΠΎΠ²Π°Ρ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠΈ Π½Π° ΡΠ²ΠΎΠΌ Π»ΠΎΠΊΠ°Π»Π½ΠΎΠΌ ΡΠ°ΡΡΠ½Π°ΡΡ;
- Π½Π΅ΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ° ΡΡΠΊΠΎΠ±ΠΈΠΌΠ° ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ Π²Π΅ΡΠ·ΠΈΡΠ° Π°Π»Π°ΡΠ° Π·Π° ΡΠΊΠ»Π°ΠΏΠ°ΡΠ΅;
- ΡΠ²Π΅ΠΊ ΡΠΈΡΡ ΡΠ°Π΄Π½ΠΈ ΠΏΡΠΎΡΡΠΎΡ ΠΊΠΎΡΠΈ ΡΠ΅ Π½Π΅ Π·Π°ΠΏΡΡΠ°Π²Π°.
Π‘Π°ΠΌΠΎ ΡΠ΅ΡΠ΅ΡΠ΅ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΈ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ ΠΈ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π²Π°ΠΌ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ Π½Π΅ΠΊΠ΅ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ. ΠΠ°, ΡΠ»Π°Π·Π½ΠΈ ΠΏΡΠ°Π³ ΡΠ΅ ΠΌΠ°Π»ΠΎ ΠΏΠΎΡΠ°ΡΡΠ°ΠΎ Ρ ΠΏΠΎΡΠ΅ΡΠ΅ΡΡ ΡΠ° ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠ° Π·Π° ΡΠΊΠ»ΠΎΠΏΠΎΠ²Π΅, Π°Π»ΠΈ ΡΠ°Π΄Π° ΠΏΠΎΡΡΠΎΡΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠ° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΠΊ Π±ΠΈΡΠΈ ΠΈΠ·Π³ΡΠ°ΡΠ΅Π½ ΠΈ Π΄Π° ΡΠ°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π°Π±ΡΠ°ΡΠΈ ΡΠ²Π΅ ΡΡΠΎ ΡΠ΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π·Π° ΡΠ΅Π³ΠΎΠ² ΠΏΡΠΎΡΠ΅Ρ ΠΈΠ·Π³ΡΠ°Π΄ΡΠ΅.
Π’Π°ΠΊΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ»ΠΈΠΊΡ ΠΊΠΎΡΡ ΡΠ°ΠΌ ΠΏΡΠΈΠΊΡΠΏΠΈΠΎ
Π’ΠΎΠΊΠΎΠΌ ΠΏΠΈΡΠ°ΡΠ° ΠΎΠ²ΠΎΠ³ ΡΠ»Π°Π½ΠΊΠ°, Π½Π°ΡΡΠ°Π»Π° ΡΠ΅ Π΄ΠΈΡΠΊΡΡΠΈΡΠ° ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡ Π°Π³Π΅Π½Π°ΡΠ° Π½Π° ΡΠ΄Π°ΡΠ΅Π½ΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΈΠΌΠ° ΠΊΠ°ΠΊΠΎ ΡΠ΅ Π½Π΅ Π±ΠΈ ΡΡΠΈΡΠ°Π²Π°ΠΎ Π³Π»Π°Π²Π½ΠΈ ΡΠ²ΠΎΡ ΠΏΠΎΠΌΠΎΡΡ Π΄ΠΎΠ΄Π°ΡΠΊΠ°
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ