เชเซเชจเชเชฟเชจเซเชธ เชตเชฟเชถเซ เชนเซเชฌเซเชฐเซ เชชเชฐ เชเชฃเชพ เชฒเซเชเซ เชเซ, เชชเชฐเชเชคเซ เชเซเชจเชเชฟเชจเซเชธ เช
เชจเซ เชกเซเชเชฐ เชเชเชจเซเชเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ เชคเซเชจเชพ เชเชฆเชพเชนเชฐเชฃเซเชจเซเช เชตเชฐเซเชฃเชจ เชฅเซเชกเชพ เชเซ. เชฌเชงเชพ เชฒเซเชเชชเซเชฐเชฟเชฏ เชชเซเชฐเซเชเซเชเซเช เชฌเชฟเชฒเซเชก เชเซเชฒเซเชธ เชเซเชตเชพ
เชเชเซ เชธเชฎเชธเซเชฏเชพเชจเซ เชเชเซเชฒ เชเซ: เชเซเชจเชเชฟเชจเซเชธ 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