āĻā§āĻ¨āĻāĻŋāĻ¨ā§āĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻšā§āĻ¯āĻžāĻŦā§āĻ°ā§āĻ¤ā§ āĻ
āĻ¨ā§āĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¤āĻŦā§ āĻā§āĻ¨āĻāĻŋāĻ¨ā§āĻ¸ āĻāĻŦāĻ āĻĄāĻāĻžāĻ° āĻāĻā§āĻ¨ā§āĻāĻ°āĻž āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻžāĻ° āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§āĨ¤ āĻ¸āĻŦ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻĒā§āĻ°āĻā§āĻā§āĻ āĻŦāĻŋāĻ˛ā§āĻĄ āĻā§āĻ˛ā§āĻ° āĻŽāĻ¤
āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§: āĻā§āĻ¨āĻāĻŋāĻ¨ā§āĻ¸ 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
āĻāĻāĻāĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻĄāĻāĻžāĻ° āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ° āĻĒā§āĻ¯āĻŧā§āĻāĻŋ āĻ¯āĻž āĻšā§āĻ¸ā§āĻ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻĄāĻāĻžāĻ° āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻ¸ā§āĻāĻāĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻĻāĻŋāĻ¨ āĻāĻā§ āĻā§āĻ¨āĻāĻŋāĻ¨ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻ¸ā§āĻ¯ā§āĻ āĻĒā§āĻ¯āĻŧā§āĻāĻŋāĻ˛ā§āĻ¨
āĻ¸ā§āĻ¤āĻ°āĻžāĻ āĻāĻ¸ā§āĻ¨ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻ°āĻžāĻāĻŋ, āĻ¯āĻžāĻ¤ā§ āĻŦāĻŋāĻ˛ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻāĻāĻāĻžāĻŦā§, āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻ¨āĻŋāĻā§āĻ āĻāĻāĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻ¯ā§āĻā§āĻ¯ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ āĻšā§āĻ¸ā§āĻā§ Node.JS-āĻāĻ° āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ OPS-āĻā§ āĻŦāĻ˛āĻ¤ā§ āĻšāĻŦā§ āĻ¨āĻžāĨ¤
FROM node:12.10.0-alpine
RUN npm install yarn -g
āĻāĻ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻŽā§āĻ āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ Node.JS āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¯ā§āĻā§āĻ¤āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻ¸ā§āĻ¨āĻžāĻ° āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻ¸āĻš āĻāĻāĻāĻŋ JVM āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻŋāĻ¤ā§āĻ°ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¤āĻŦā§ āĻā§ āĻšāĻŦā§? āĻ¸āĻŽāĻžāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻ¸ā§āĻŦāĻžāĻ§ā§āĻ¨āĨ¤
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"
}
}
āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻ agent
āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ docker
āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
- āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻžāĻŽāĻāĻ°āĻŖ āĻ¨ā§āĻ¤āĻŋ āĻ āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻĒāĻžāĻ¤ā§āĻ°ā§āĻ° āĻ¨āĻžāĻŽ;
- āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ° āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻ°āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻāĻŋāĻā§ āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ°ā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻāĻāĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŽāĻžāĻāĻ¨ā§āĻ āĻāĻ°āĻŋāĨ¤
āĻāĻŦāĻ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ§āĻžāĻĒā§ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŋ āĻ¯ā§ āĻĄāĻāĻžāĻ° āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻā§āĻ¨ā§āĻā§āĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻā§āĻ¨ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻ¯ā§ āĻā§āĻ¨āĻ āĻāĻŋāĻā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻ ā§āĻ¯āĻžāĻ¨āĻ¸āĻŋāĻŦāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻžāĻ˛ā§ āĻāĻ°āĻŋāĨ¤
āĻ¨ā§āĻā§ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻā§āĻ¨ā§āĻ°āĻŋāĻ āĻā§āĻ¨āĻāĻŋāĻ¨ā§āĻ¸āĻĢāĻžāĻāĻ˛ āĻĻā§āĻāĻžāĻ¤ā§ āĻāĻžāĻ āĻ¯āĻž āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ Node.JS āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
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 āĻŽāĻŋāĻ¨āĻŋāĻā§ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°āĻž āĻšāĻ¯āĻŧ;
- āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻ¯ā§āĻā§āĻ¯ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄ āĻĒāĻ°āĻŋāĻŦā§āĻļ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ°ā§ āĻāĻāĻāĻžāĻŦā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨;
- āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ¸āĻ°āĻā§āĻāĻžāĻŽā§āĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¨ā§āĻ;
- āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°ā§āĻŽāĻā§āĻˇā§āĻ¤ā§āĻ° āĻ¯āĻž āĻāĻāĻā§ āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ¨āĻŋāĻā§āĻ āĻ¸āĻšāĻ āĻāĻŦāĻ āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻāĻŋāĻā§ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻĒā§āĻ¤ā§ āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ. āĻšā§āĻ¯āĻžāĻ, āĻ¸āĻŽāĻžāĻŦā§āĻļāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻĨā§āĻ°ā§āĻļāĻšā§āĻ˛ā§āĻĄ āĻāĻŋāĻā§āĻāĻž āĻŦā§āĻĄāĻŧā§āĻā§, āĻ¤āĻŦā§ āĻāĻāĻ¨ āĻāĻāĻāĻŋ āĻā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯ā§ āĻāĻāĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻšāĻŦā§ āĻāĻŦāĻ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻ¨āĻŋāĻā§āĻ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŋāĻā§ āĻāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻāĻŽāĻžāĻ° āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻž āĻāĻŦāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻĻā§āĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻā§āĻ¨ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻāĻāĻŋ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ ā§āĻāĻŋāĻ˛ āĻ¯āĻžāĻ¤ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ˛āĻžāĻāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻ¨ā§āĻĄ āĻ˛ā§āĻĄ āĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com