เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฟเดฐเดตเดงเดฟ เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เตพ เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเตฝ เดœเต†เด™เตเด•เดฟเตปเดธเดฟเตฝ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพ เดŽเด™เตเด™เดจเต† เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเด‚

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฟเดฐเดตเดงเดฟ เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เตพ เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเตฝ เดœเต†เด™เตเด•เดฟเตปเดธเดฟเตฝ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพ เดŽเด™เตเด™เดจเต† เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเด‚

เดœเต†เตปเด•เดฟเตปเดธเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเต เดนเดฌเตเดฐเต†เดฏเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดฒเต‡เด–เดจเด™เตเด™เดณเตเดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เดœเต†เตปเด•เดฟเตปเดธเตเด‚ เดกเต‹เด•เตเด•เตผ เดเดœเดจเตเดฑเตเดฎเดพเดฐเตเด‚ เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดšเตเดฐเตเด•เตเด•เด‚. เดชเต‹เดฒเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดœเดจเดชเตเดฐเดฟเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดฌเดฟเตฝเดกเต เดŸเต‚เดณเตเด•เดณเตเด‚ Drone.io, เดฌเดฟเดฑเตเดฑเตเดฌเด•เตเด•เดฑเตเดฑเต เดชเตˆเดชเตเดชเตเดฒเตˆเตป, GitLab, GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดฎเดฑเตเดฑเตเดณเตเดณเดตเตผเด•เตเด•เต เดŽเดฒเตเดฒเดพเด‚ เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเตเด•เดณเดฟเตฝ เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดŽเดจเตเดจเดพเตฝ เดœเต†เด™เตเด•เดฟเตปเดธเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดฎเต‹?

เด‡เดจเตเดจเต เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดจเต เด’เดฐเต เดชเดฐเดฟเดนเดพเดฐเดฎเตเดฃเตเดŸเต: เดœเต†เด™เตเด•เดฟเตปเดธเต 2 เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดฎเดฟเด•เดšเตเดšเดคเดพเดฃเต เดกเต‹เด•เตเด•เตผ เดเดœเดจเตเดฑเตเดฎเดพเตผ. เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเดพเตป เดŽเดจเตเดฑเต† เด…เดจเตเดญเดตเด‚ เดชเด™เตเด•เตเดตเต†เด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เดคเต เดŽเด™เตเด™เดจเต† เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเต เด•เดพเดฃเดฟเด•เตเด•เดพเดจเตเด‚ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดžเดพเตป เดˆ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดฟเดฏเดคเต?

เดžเด™เตเด™เตพ เด•เดฎเตเดชเดจเดฟเดฏเดฟเตฝ เด†เดฏเดคเดฟเดจเดพเตฝ เดธเดฟเดŸเตเดฐเต‹เดฃเดฟเดฏเด‚ เดžเด™เตเด™เตพ เดตเดฟเดตเดฟเดง เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเดฟเดฆเตเดฏเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด…เดธเด‚เดฌเตเดฒเดฟ เดฎเต†เดทเต€เดจเดฟเตฝ Node.JS, Gradle, Ruby, JDK เดคเตเดŸเด™เตเด™เดฟเดฏ เดตเดฟเดตเดฟเดง เดชเดคเดฟเดชเตเดชเตเด•เตพ เดธเต‚เด•เตเดทเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดŽเดจเตเดจเดพเตฝ เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดชเดคเดฟเดชเตเดชเต เดตเตˆเดฐเตเดฆเตเดงเตเดฏเด™เตเด™เตพ เด’เดดเดฟเดตเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ. เด…เดคเต†, nvm, rvm เดชเต‹เดฒเตเดณเตเดณ เดตเดฟเดตเดฟเดง เดชเดคเดฟเดชเตเดชเต เดฎเดพเดจเต‡เดœเตผเดฎเดพเดฐเตเดฃเตเดŸเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพ เดชเดฑเดžเตเดžเดพเตฝ เดจเดฟเด™เตเด™เตพ เดถเดฐเดฟเดฏเดพเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เด…เดตเดฏเดฟเตฝ เดŽเดฒเตเดฒเดพเด‚ เด…เดคเตเดฐ เดธเตเด—เดฎเดฎเดฒเตเดฒ, เดˆ เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เตพเด•เตเด•เต เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเตเดฃเตเดŸเต:

  • เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผ เดตเตƒเดคเตเดคเดฟเดฏเดพเด•เตเด•เดพเตป เดฎเดฑเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดตเดฒเดฟเดฏ เดฑเตบเดŸเตˆเด‚;
  • เด’เดฐเต‡ เดฑเตบเดŸเตˆเดฎเดฟเดจเตเดฑเต† เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดคเดฟเดชเตเดชเตเด•เตพ เดคเดฎเตเดฎเดฟเตฝ เดตเตˆเดฐเตเดฆเตเดงเตเดฏเด™เตเด™เดณเตเดฃเตเดŸเต;
  • เด“เดฐเต‹ เดกเต†เดตเดฒเดชเตเดชเตผเด•เตเด•เตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เด˜เดŸเด•เด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เดฎเดฑเตเดฑเต เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเตเดฃเตเดŸเต, เดชเด•เตเดทเต‡ เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเดพเด‚.

เดกเต‹เด•เตเด•เดฑเดฟเดฒเต† เดœเต†เด™เตเด•เดฟเตปเดธเต

เดกเดตเดฒเดชเตโ€Œเดฎเต†เดจเตเดฑเต เดฒเต‹เด•เดคเตเดคเต เดกเต‹เด•เตเด•เตผ เด‡เดชเตเดชเต‹เตพ เดจเดจเตเดจเดพเดฏเดฟ เดธเตเดฅเดพเดชเดฟเดคเดฎเดพเดฏเดคเดฟเดจเดพเตฝ, เดกเต‹เด•เตเด•เตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เดŽเดจเตเดคเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดกเต‹เด•เตเด•เดฑเดฟเตฝ เดœเต†เด™เตเด•เดฟเตปเดธเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฎเดฑเตเดฑเต เดกเต‹เด•เตเด•เตผ เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดŽเดจเตเดฑเต† เดชเดฐเดฟเดนเดพเดฐเด‚. เดˆ เดšเต‹เดฆเตเดฏเด‚ 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 เดฎเดฟเดจเดฟเดฑเตเดฑเดพเดฏเดฟ เด•เตเดฑเดšเตเดšเต;
  • เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เด•เดฎเตเดชเตเดฏเต‚เดŸเตเดŸเดฑเดฟเตฝ เดˆ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฌเดฟเตฝเดกเต เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต;
  • เด…เดธเด‚เดฌเตเดฒเดฟ เดŸเต‚เดณเตเด•เดณเตเดŸเต† เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดคเดฟเดชเตเดชเตเด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเตˆเดฐเตเดฆเตเดงเตเดฏเด™เตเด™เดณเดฟเตฝ เดชเตเดฐเดถเตเดจเด™เตเด™เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒ;
  • เดŽเดชเตเดชเต‹เดดเตเด‚ เด…เดŸเดžเตเดžเตเด•เดฟเดŸเด•เตเด•เดพเดคเตเดค เดตเตƒเดคเตเดคเดฟเดฏเตเดณเตเดณ เดตเตผเด•เตเด•เตโ€Œเดธเตโ€Œเดชเต‡เดธเต.

เดชเดฐเดฟเดนเดพเดฐเด‚ เดคเดจเตเดจเต† เดฒเดณเดฟเดคเดตเตเด‚ เดตเตเดฏเด•เตเดคเดตเตเดฎเดพเดฃเต เด•เต‚เดŸเดพเดคเต† เดšเดฟเดฒ เด—เตเดฃเด™เตเด™เตพ เดจเต‡เดŸเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดคเต†, เด…เดธเด‚เดฌเตเดฒเดฟเด•เตพเด•เตเด•เดพเดฏเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เดฎเดพเตปเดกเตเด•เดณเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเดฎเตเดชเต‹เตพ เดŽเตปเดŸเตเดฐเดฟ เดคเตเดฐเต†เดทเต‹เตพเดกเต เด…เตฝเดชเตเดชเด‚ เด‰เดฏเตผเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด‡เดชเตเดชเต‹เตพ เด…เดคเต เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดฎเต†เดจเตเดจเตเด‚ เดกเต†เดตเดฒเดชเตเดชเตผเด•เตเด•เต เดคเดจเตเดฑเต† เดจเดฟเตผเดฎเตเดฎเดพเดฃ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด’เดฐเต เด—เตเดฏเดพเดฐเดฃเตเดŸเดฟเดฏเตเดฃเตเดŸเต.

เดžเดพเตป เดถเต‡เด–เดฐเดฟเดšเตเดš เดšเดฟเดคเตเดฐเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ เดœเต†เด™เตเด•เดฟเตปเดธเต + เดกเต‹เด•เตเด•เตผ. เดŽเดฒเตเดฒเดพ เดธเตเดฐเต‹เดคเดธเตเดธเตเด•เดณเตเด‚ เดคเตเดฑเดจเตเดจเดคเตเด‚ เดธเตเดฅเดฟเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเดฎเดพเดฃเต rmuhamedgaliev/jenkins_docker.

เดˆ เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ, เด’เดฐเต เดชเตเดฒเด—เดฟเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดธเตเดฑเตเดฑเตผ เดจเต‹เดกเต เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเต†เตผเดตเดฑเตเด•เดณเดฟเตฝ เดเดœเดจเตเดฑเตเดฎเดพเดฐเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด’เดฐเต เดšเตผเดšเตเดš เด‰เดฏเตผเดจเตเดจเต. เดกเต‹เด•เตเด•เตผ-เดชเตเดฒเด—เดฟเตป. เดŽเดจเตเดจเดพเตฝ เดญเดพเดตเดฟเดฏเดฟเตฝ เดžเดพเตป เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•