เจœเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‡เจจเจ•เจฟเฉฐเจธ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ•เจฟเจตเฉ‡เจ‚ เจ‡เจ•เฉฑเจ เฉ‡ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ

เจœเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‡เจจเจ•เจฟเฉฐเจธ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ•เจฟเจตเฉ‡เจ‚ เจ‡เจ•เฉฑเจ เฉ‡ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ

เจœเฉ‡เจจเจ•เจฟเฉฐเจธ เจฌเจพเจฐเฉ‡ เจนเฉˆเจฌเจฐเฉ‡ 'เจคเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฒเฉ‡เจ– เจนเจจ, เจชเจฐ เจ•เฉเจ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ‡ เจนเจจ เจ•เจฟ เจœเฉ‡เจจเจ•เจฟเฉฐเจธ เจ…เจคเฉ‡ เจกเฉŒเจ•เจฐ เจเจœเฉฐเจŸ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจธเจพเจฐเฉ‡ เจชเฉเจฐเจธเจฟเฉฑเจง เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจฟเจตเฉ‡เจ‚ 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.

เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจฒเจฟเจ–เจฃ เจตเฉ‡เจฒเฉ‡, เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐเจพเจ‚ 'เจคเฉ‡ เจเจœเฉฐเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจšเจฐเจšเจพ เจนเฉ‹เจˆ เจคเจพเจ‚ เจœเฉ‹ เจชเจฒเฉฑเจ—เจ‡เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฎเจพเจธเจŸเจฐ เจจเฉ‹เจก เจจเฉ‚เฉฐ เจฒเฉ‹เจก เจจเจพ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เฉ‡เฅค docker-เจชเจฒเฉฑเจ—เจ‡เจจ. เจชเจฐ เจฎเฉˆเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เจพเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹