ืืฉ ืืืืจืื ืจืืื ืขื Habrรฉ ืขื ื'ื ืงืื ืก, ืืื ืืขืืื ืืชืืจืื ืืืืืืืช ืืืืคื ืฉืื ื'ื ืงืื ืก ืืกืืื ื ืืืงืจ ืขืืืืื. ืื ืืืืื ืืคืืคืืืจืืื ืืื ืืืช ืคืจืืืงืืื ืืื
ืืืื ืืฉ ืคืชืจืื ืืืขืื: ื'ื ืงืื ืก 2 ืืขืืื ืืขืืื ืืืชื
ืืื ืืชืืืชื ืืคืชืืจ ืืช ืืืขืื ืืื?
ืืื ืื ืื ื ืืืืจื
- ืืืืช ืืืืื ืฉื ืืื ืจืืฆื ืฉืืคืชืืื ืฉืืืืื ืื ืงืืช;
- ืืฉ ืืชื ืืฉืืืืช ืืื ืืจืกืืืช ืฉืื ืืช ืฉื ืืืชื ืืื ื ืจืืฆื;
- ืื ืืคืชื ืฆืจืื ืกื ืืืจ ืฉื ืจืืืืื.
ืืฉ ืขืื ืืขืืืช, ืืื ืืจืฉื ืื ืืกืคืจ ืืื ืขื ืืคืชืจืื.
ื'ื ืงืื ืก ืืืืงืจ
ืืืืืื ืฉ-Docker ืืืืกืกืช ืืืื ืืืื ืืขืืื ืืคืืชืื, ื ืืชื ืืืคืขืื ืืืขื ืื ืืืจ ืืืืฆืขืืช Docker. ืืคืชืจืื ืฉืื ืืื ืฉื'ื ืงืื ืก ืืืื ื-Docker ืืืืื ืืืคืขืื ืงืื ืืืื ืจืื ืืืจืื ืฉื Docker. ืฉืืื ืื ืืืื ืืืืฉืื ืขืื ืืฉื ืช 2013 ืืืืืจ "
ืืงืืฆืืจ, ืืชื ืจืง ืฆืจืื ืืืชืงืื ืืช Docker ืขืฆืื ืืงืื ืืืื ืจ ืขืืื ืืืืขืืืช ืืช ืืงืืืฅ /var/run/docker.sock
.
ืื ื ืืืืื ืฉื Dockerfile ืฉืืชืืจืจ ืขืืืจ ื'ื ืงืื ืก.
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
ืืคืืื, ืงืืืื ื ืงืื ืืืื ืจ Docker ืฉืืืื ืืืฆืข ืคืงืืืืช Docker ืืืืฉื ืืืืจื.
ืื ืืืช ืืชืงื ื
ืื ืืืื ื'ื ืงืื ืก ืงืืืื ืืช ืืืืืื ืืช ืืชืืจ ืืช ืืืืืื ืฉืื ืืืืฆืขืืช
ืื ืืืื ื ืฉืื Dockerfile ืืืืื ืืืืืจ ืขืฆืื, ืฉืืืื ืืช ืื ืืกืคืจืืืช ืืืจืืฉืืช ืืื ืืื. ืื, ืืืคืชื ืขืฆืื ืืืื ืืืืื ืกืืืื ืฉื ืืชื ืช ืืืืจื ืืื ืืฆืืจื ืืืงืฉ ื-OPS ืืืชืงืื ืืจืกื ืกืคืฆืืคืืช ืฉื Node.JS ืขื ืืืืจื.
FROM node:12.10.0-alpine
RUN npm install yarn -g
ืชืืื ืช ืื ืืื ืื ืืชืืืื ืืจืื ืืืฉืืื Node.JS. ืื ืื, ืืืฉื, ืืชื ืฆืจืื ืชืืื ื ืขืืืจ ืคืจืืืงื JVM ืขื ืกืืจืง Sonar ืืืื ืืชืืื? ืืชื ืืืคืฉื ืืืืืจ ืืช ืืจืืืืื ืฉืืชื ืฆืจืื ืืืจืืื.
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
ืืืคื ืืชื ืืืื ืืฆืืื:
- ืฉื ืืืื ืืืจืืื ืืืชืื ืืืืื ืืืช ืืฉืืืช ืฉืื;
- ืืจืืืื ืืื ืืืจืืฉืื ืืืคืขืืช ืืงืื ืืืื ืจ ื-build, ืืืฉืจ ืืืงืจื ืฉืื ื ืื ื ืืขืืื ืืช ืืกืคืจืืื ืื ืืืืืช ืืชืืจ ืกืคืจืืื ืืชืื ืืงืื ืืืื ืจ.
ืืืืจ ืืฉืืื ืืื ืืื ืื ื ืืฆืืื ืื ืืืื ืคืงืืืืช ืืืฆืข ืืชืื ืกืืื ืืื ืืื ืฉื Docker. ืื ืืืื ืืืืืช ืื ืืืจ, ืื ืื ื ืื ืืฉืืง ืคืจืืกืช ืืืฉืืืื ืืืืฆืขืืช ansible.
ืืืื ืื ื ืจืืฆื ืืืจืืืช Jenkinsfile ืื ืจื ืฉืืืฉืื 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