แžšแž”แŸ€แž”แž”แŸ’แžšแž˜แžผแž›แž‚แž˜แŸ’แžšแŸ„แž„แž“แŸ…แž€แŸ’แž“แžปแž„ Jenkins แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแž€แžถแžšแž”แžšแžทแž™แžถแž€แžถแžŸแžแžปแžŸแŸ—แž‚แŸ’แž“แžถแž‡แžถแž…แŸ’แžšแžพแž“แŸ”

แžšแž”แŸ€แž”แž”แŸ’แžšแž˜แžผแž›แž‚แž˜แŸ’แžšแŸ„แž„แž“แŸ…แž€แŸ’แž“แžปแž„ Jenkins แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแž€แžถแžšแž”แžšแžทแž™แžถแž€แžถแžŸแžแžปแžŸแŸ—แž‚แŸ’แž“แžถแž‡แžถแž…แŸ’แžšแžพแž“แŸ”

แž˜แžถแž“แžขแžแŸ’แžแž”แž‘แž‡แžถแž…แŸ’แžšแžพแž“แž“แŸ…แž›แžพ Habre แžขแŸ†แž–แžธ Jenkins แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž˜แžถแž“แž˜แž“แžปแžŸแŸ’แžŸแžแžทแž…แžŽแžถแžŸแŸ‹แžŠแŸ‚แž›แž–แžทแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแžœแžทแž’แžธแžŠแŸ‚แž› Jenkins แž“แžทแž„แž—แŸ’แž“แžถแž€แŸ‹แž„แžถแžš docker แž’แŸ’แžœแžพแž€แžถแžšแŸ” แžงแž”แž€แžšแžŽแŸแžŸแžถแž„แžŸแž„แŸ‹แž‚แž˜แŸ’แžšแŸ„แž„แž–แŸแž‰แž“แžทแž™แž˜แž‘แžถแŸ†แž„แžขแžŸแŸ‹แžŠแžผแž…แž‡แžถ Drone.io, แž”แŸ†แž–แž„แŸ‹ Bitbucket, GitLab, แžŸแž€แž˜แŸ’แž˜แž—แžถแž– GitHub แž“แžทแž„แžขแŸ’แž“แž€แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแžขแžถแž…แž”แŸ’แžšแž˜แžผแž›แžขแŸ’แžœแžธแž‚แŸ’แžšแž”แŸ‹แž™แŸ‰แžถแž„แž“แŸ…แž€แŸ’แž“แžปแž„แž’แžปแž„แŸ” แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž…แžปแŸ‡ Jenkins แžœแžทแž‰?

แžแŸ’แž„แŸƒแž“แŸแŸ‡แž˜แžถแž“แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž…แŸ†แž–แŸ„แŸ‡แž”แž‰แŸ’แž แžถแŸ– Jenkins 2 แž–แžผแž€แŸ‚แž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™ แž—แŸ’แž“แžถแž€แŸ‹แž„แžถแžš Docker. แž“แŸ…แž€แŸ’แž“แžปแž„แžขแžแŸ’แžแž”แž‘แž“แŸแŸ‡ แžแŸ’แž‰แžปแŸ†แž…แž„แŸ‹แž…แŸ‚แž€แžšแŸ†แž›แŸ‚แž€แž”แž‘แž–แžทแžŸแŸ„แž’แž“แŸแžšแž”แžŸแŸ‹แžแŸ’แž‰แžปแŸ† แž“แžทแž„แž”แž„แŸ’แž แžถแž‰แž–แžธแžšแž”แŸ€แž”แžŠแŸ‚แž›แžขแŸ’แž“แž€แžขแžถแž…แž’แŸ’แžœแžพแžœแžถแžŠแŸ„แž™แžแŸ’แž›แžฝแž“แžฏแž„แž”แžถแž“แŸ”

แž แŸแžแžปแžขแŸ’แžœแžธแž”แžถแž“แž‡แžถแžแŸ’แž‰แžปแŸ†แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แžŠแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž”แž‰แŸ’แž แžถแž“แŸแŸ‡?

แž…แžถแž”แŸ‹แžแžถแŸ†แž„แž–แžธแž™แžพแž„แž“แŸ…แž€แŸ’แž“แžปแž„แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“ แžŸแŸŠแžธแžแžผแž“แžธแž‰แŸ‰แžผแž˜ แžŠแŸ„แž™แžŸแžถแžšแž™แžพแž„แž”แŸ’แžšแžพแž”แž…แŸ’แž…แŸแž€แžœแžทแž‘แŸ’แž™แžถแž•แŸ’แžŸแŸแž„แŸ—แž‚แŸ’แž“แžถแž‡แžถแž…แŸ’แžšแžพแž“ แž™แžพแž„แžแŸ’แžšแžผแžœแžšแž€แŸ’แžŸแžถแž€แŸ†แžŽแŸ‚แž•แŸ’แžŸแŸแž„แž‚แŸ’แž“แžถแž“แŸƒ Node.JS, Gradle, Ruby, JDK แž“แžทแž„แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแž“แŸ…แž›แžพแž˜แŸ‰แžถแžŸแŸŠแžธแž“แžŠแŸ†แžกแžพแž„แŸ” แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž‡แžถแžšแžฟแž™แŸ—แž€แžถแžšแž”แŸ‰แŸ‡แž‘แž„แŸ’แž‚แžทแž…แž“แŸƒแž€แŸ†แžŽแŸ‚แž˜แžทแž“แžขแžถแž…แž‡แŸ€แžŸแžœแžถแž„แž”แžถแž“แž‘แŸแŸ” แž”แžถแž‘/แž…แžถแžŸ แžขแŸ’แž“แž€แž“แžนแž„แž“แžทแž™แžถแž™แžแŸ’แžšแžผแžœแž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แž“แžทแž™แžถแž™แžแžถแž˜แžถแž“แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แž€แŸ†แžŽแŸ‚แž•แŸ’แžŸแŸแž„แŸ—แžŠแžผแž…แž‡แžถ nvm, rvm แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž˜แžทแž“แž˜แŸ‚แž“แžขแŸ’แžœแžธแŸ—แž‘แžถแŸ†แž„แžขแžŸแŸ‹แž‚แžบแžšแž›แžผแž“แž‡แžถแž˜แžฝแž™แž–แžฝแž€แž‚แŸแž‘แŸ แž แžพแž™แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž‘แžถแŸ†แž„แž“แŸแŸ‡แž˜แžถแž“แž”แž‰แŸ’แž แžถแŸ–

  • แž…แŸ†แž“แžฝแž“แžŠแŸแž…แŸ’แžšแžพแž“แž“แŸƒแž–แŸแž›แžœแŸแž›แžถแžšแžแŸ‹แžŠแŸ‚แž›แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž—แŸ’แž›แŸแž…แžŸแž˜แŸ’แžขแžถแžแŸ”
  • แž˜แžถแž“แž€แžถแžšแž”แŸ‰แŸ‡แž‘แž„แŸ’แž‚แžทแž…แžšแžœแžถแž„แž€แŸ†แžŽแŸ‚แž•แŸ’แžŸแŸแž„แž‚แŸ’แž“แžถแž“แŸƒแž–แŸแž›แžœแŸแž›แžถแžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŠแžผแž…แž‚แŸ’แž“แžถ;
  • แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž‚แŸ’แžšแž”แŸ‹แžšแžผแž”แžแŸ’แžšแžผแžœแž€แžถแžšแžŸแŸ†แžŽแžปแŸ†แžŸแž˜แžถแžŸแž—แžถแž‚แž•แŸ’แžŸแŸแž„แž‚แŸ’แž“แžถแŸ”

แž˜แžถแž“แž”แž‰แŸ’แž แžถแž•แŸ’แžŸแŸแž„แž‘แŸ€แž แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžแŸ’แž‰แžปแŸ†แžŸแžผแž˜แž”แŸ’แžšแžถแž”แŸ‹แžขแŸ’แž“แž€แžขแŸ†แž–แžธแžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แŸ”

Jenkins แž“แŸ… Docker

แžŠแŸ„แž™แžŸแžถแžšแžฅแžกแžผแžœแž“แŸแŸ‡ Docker แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžกแžพแž„แž™แŸ‰แžถแž„แž›แŸ’แžขแž“แŸ…แž€แŸ’แž“แžปแž„แž–แžทแž—แž–แžขแž—แžทแžœแžŒแŸ’แžแž“แŸ แžŸแŸ’แž‘แžพแžšแžแŸ‚แžขแŸ’แžœแžธแŸ—แž‘แžถแŸ†แž„แžขแžŸแŸ‹แžขแžถแž…แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž”แžถแž“แžŠแŸ„แž™แž”แŸ’แžšแžพ Docker แŸ” แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แžšแž”แžŸแŸ‹แžแŸ’แž‰แžปแŸ†แž‚แžบแžแŸ’แžšแžผแžœแž˜แžถแž“ Jenkins แž“แŸ…แž€แŸ’แž“แžปแž„ Docker แž แžพแž™แžขแžถแž…แžŠแŸ†แžŽแžพแžšแž€แžถแžš Docker containers แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแŸ” แžŸแŸ†แžŽแžฝแžšโ€‹แž“แŸแŸ‡โ€‹แž…แžถแž”แŸ‹โ€‹แž•แŸ’แžŠแžพแž˜โ€‹แžŸแžฝแžšโ€‹แž˜แŸ’แžŠแž„โ€‹แž‘แŸ€แžโ€‹แž€แŸ’แž“แžปแž„โ€‹แž†แŸ’แž“แžถแŸ† แŸขแŸ แŸกแŸฃ แž€แŸ’แž“แžปแž„โ€‹แžขแžแŸ’แžแž”แž‘ โ€œแžฅแžกแžผแžœแž“แŸแŸ‡ Docker แžขแžถแž…แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž“แŸ…แž€แŸ’แž“แžปแž„ Docker"แŸ”

แž“แžทแž™แžถแž™แžฑแŸ’แž™แžแŸ’แž›แžธแžขแŸ’แž“แž€แž‚แŸ’แžšแžถแž“แŸ‹แžแŸ‚แžแŸ’แžšแžผแžœแžŠแŸ†แžกแžพแž„ Docker แžแŸ’แž›แžฝแž“แžœแžถแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžปแž„แžแžบแž“แŸแžšแž’แŸ’แžœแžพแž€แžถแžšแž แžพแž™แž˜แŸ‰แŸ„แž“แžฏแž€แžŸแžถแžš /var/run/docker.sock.

แž“แŸแŸ‡แž‚แžบแž‡แžถแžงแž‘แžถแž แžšแžŽแŸ Dockerfile แžŠแŸ‚แž›แž”แžถแž“แž”แŸ’แžšแŸ‚แž€แŸ’แž›แžถแž™แžŸแž˜แŸ’แžšแžถแž”แŸ‹ Jenkins แŸ”

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 container แžŠแŸ‚แž›แžขแžถแž…แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถ Docker แž“แŸ…แž›แžพแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ‰แžถแžŸแŸŠแžธแž“แŸ”

แž”แž„แŸ’แž€แžพแžแž€แžถแžšแžŠแŸ†แžกแžพแž„

แž˜แžทแž“แž™แžผแžšแž”แŸ‰แžปแž“แŸ’แž˜แžถแž“ Jenkins แž‘แž‘แžฝแž›แž”แžถแž“แžฑแž€แžถแžŸแžŠแžพแž˜แŸ’แž”แžธแž–แžทแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแž…แŸ’แž”แžถแž”แŸ‹แžšแž”แžŸแŸ‹แžœแžถแžŠแŸ„แž™แž”แŸ’แžšแžพ แž”แŸ†แž–แž„แŸ‹แž”แž„แŸ’แž แžผแžš แžœแžถแž€แŸ’แž™แžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ แžŠแŸ‚แž›แž’แŸ’แžœแžพแžฑแŸ’แž™แžœแžถแž„แžถแž™แžŸแŸ’แžšแžฝแž›แž€แŸ’แž“แžปแž„แž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแžŸแŸ’แž‚แŸ’แžšแžธแž”แžŸแžถแž„แžŸแž„แŸ‹ แž“แžทแž„แžšแž€แŸ’แžŸแžถแž‘แžปแž€แžœแžถแž“แŸ…แž€แŸ’แž“แžปแž„แžƒแŸ’แž›แžถแŸ†แž„แŸ”

แžŠแžผแž…แŸ’แž“แŸแŸ‡ แž…แžผแžšแž™แžพแž„แžŠแžถแž€แŸ‹ 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/

แž™แžพแž„แž”แžถแž“แž–แžทแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแž”แžšแžทแž™แžถแž€แžถแžŸแž“แŸƒแž€แžถแžšแž‡แžฝแž”แž”แŸ’แžšแž‡แžปแŸ†แž‚แŸ’แž“แžถ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžแžพ Jenkins แžแŸ’แžšแžผแžœแž’แŸ’แžœแžพแžขแŸ’แžœแžธแž‡แžถแž˜แžฝแž™แžœแžถ? แž แžพแž™แž—แŸ’แž“แžถแž€แŸ‹แž„แžถแžš Jenkins แžขแžถแž…แž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™แžšแžผแž”แž—แžถแž– Docker แž“แžทแž„แž”แž„แŸ’แž€แžพแžแžœแžถแž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„แŸ”

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 container แžŠแŸ‚แž›แž€แŸ’แž“แžปแž„แž€แžšแžŽแžธแžšแž”แžŸแŸ‹แž™แžพแž„ แž™แžพแž„แž˜แŸ‰แŸ„แž“แžแžแž”แž…แŸ’แž…แžปแž”แŸ’แž”แž“แŸ’แž“แž‡แžถแžแžแž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„แž€แžปแž„แžแžบแž“แŸแžšแŸ”

แž แžพแž™แž“แŸ…แž€แŸ’แž“แžปแž„แž‡แŸ†แž แžถแž“แžŸแžถแž„แžŸแž„แŸ‹แžšแžฝแž…แž แžพแž™ แž™แžพแž„แž…แž„แŸ’แžขแžปแž›แž”แž„แŸ’แž แžถแž‰แžแžถแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžŽแžถแžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„ Docker build agentแŸ” แž“แŸแŸ‡แžขแžถแž…แž‡แžถแžขแŸ’แžœแžธแž€แŸแž”แžถแž“ แžŠแžผแž…แŸ’แž“แŸแŸ‡แžแŸ’แž‰แžปแŸ†แž€แŸแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž€แžถแžšแžŠแžถแž€แŸ‹แžฑแŸ’แž™แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ„แž™แž”แŸ’แžšแžพ ansible แŸ”

แžแžถแž„แž€แŸ’แžšแŸ„แž˜แž“แŸแŸ‡แžแŸ’แž‰แžปแŸ†แž…แž„แŸ‹แž”แž„แŸ’แž แžถแž‰แžฏแž€แžŸแžถแžš Jenkins แž‘แžผแž‘แŸ…แžŠแŸ‚แž›แž€แž˜แŸ’แž˜แžœแžทแž’แžธ 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 แž“แžถแž‘แžธแž€แŸ’แž“แžปแž„แž˜แžฝแž™แž‚แž˜แŸ’แžšแŸ„แž„แŸ”
  • แž”แžšแžทแžŸแŸ’แžแžถแž“แž”แž„แŸ’แž€แžพแžแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แžขแžถแž…แž’แŸ’แžœแžพแž˜แŸ’แžแž„แž‘แŸ€แžแž”แžถแž“แž‘แžถแŸ†แž„แžŸแŸ’แžšแžปแž„ แž…แžถแž”แŸ‹แžแžถแŸ†แž„แž–แžธแžขแŸ’แž“แž€แžขแžถแž…แž”แž„แŸ’แž€แžพแžแžœแžถแžแžถแž˜แžœแžทแž’แžธแž“แŸแŸ‡แž“แŸ…แž›แžพแž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแž€แŸ’แž“แžปแž„แžแŸ†แž”แž“แŸ‹แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แŸ”
  • แž˜แžทแž“แž˜แžถแž“แž”แž‰แŸ’แž แžถแž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž”แŸ‰แŸ‡แž‘แž„แŸ’แž‚แžทแž…แžšแžœแžถแž„แž€แŸ†แžŽแŸ‚แž•แŸ’แžŸแŸแž„แž‚แŸ’แž“แžถแž“แŸƒแžงแž”แž€แžšแžŽแŸแž‡แžฝแž”แž”แŸ’แžšแž‡แžปแŸ†แž‚แŸ’แž“แžถ;
  • แžแŸ‚แž„แžแŸ‚แž‡แžถแž€แž“แŸ’แž›แŸ‚แž„แž’แŸ’แžœแžพแž€แžถแžšแžŸแŸ’แžขแžถแž แžŠแŸ‚แž›แž˜แžทแž“แž˜แžถแž“แž€แžถแžšแžŸแŸ’แž‘แŸ‡แŸ”

แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แžŠแŸ„แž™แžแŸ’แž›แžฝแž“แžœแžถแž‚แžบแžŸแžถแž˜แž‰แŸ’แž‰ แž“แžทแž„แž‡แžถแž€แŸ‹แžŸแŸ’แžแŸ‚แž„ แž แžพแž™แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แžขแŸ’แž“แž€แž‘แž‘แžฝแž›แž”แžถแž“แžขแžแŸ’แžแž”แŸ’แžšแž™แŸ„แž‡แž“แŸแž˜แžฝแž™แž…แŸ†แž“แžฝแž“แŸ” แž”แžถแž‘ แž€แž˜แŸ’แžšแžทแžแž…แžผแž›แž”แžถแž“แž€แžพแž“แžกแžพแž„แž”แž“แŸ’แžแžทแž…แž”แžพแž”แŸ’แžšแŸ€แž”แž’แŸ€แž”แž‘แŸ…แž“แžนแž„แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžŸแžถแž˜แž‰แŸ’แž‰แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž‡แžฝแž”แž”แŸ’แžšแž‡แžปแŸ†แž‚แŸ’แž“แžถ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžฅแžกแžผแžœแž“แŸแŸ‡แž˜แžถแž“แž€แžถแžšแž’แžถแž“แžถแžแžถแžœแžถแž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แžŸแžถแž„แžŸแž„แŸ‹แž‡แžถแž“แžทแž…แŸ’แž… แž แžพแž™แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸแžแŸ’แž›แžฝแž“แžฏแž„แžขแžถแž…แž‡แŸ’แžšแžพแžŸแžšแžพแžŸแžขแŸ’แžœแžธแž‚แŸ’แžšแž”แŸ‹แž™แŸ‰แžถแž„แžŠแŸ‚แž›แž…แžถแŸ†แž”แžถแž…แŸ‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŸแžถแž„แžŸแž„แŸ‹แžšแž”แžŸแŸ‹แž‚แžถแžแŸ‹แŸ”

แžขแŸ’แž“แž€แž€แŸแžขแžถแž…แž”แŸ’แžšแžพแžšแžผแž”แž—แžถแž–แžŠแŸ‚แž›แžแŸ’แž‰แžปแŸ†แž”แžถแž“แž”แŸ’แžšแž˜แžผแž›แž”แžถแž“แž•แž„แžŠแŸ‚แžšแŸ” Jenkins + Docker. แž”แŸ’แžšแž—แž–แž‘แžถแŸ†แž„แžขแžŸแŸ‹แžแŸ’แžšแžผแžœแž”แžถแž“แž”แžพแž€แž“แžทแž„แž˜แžถแž“แž‘แžธแžแžถแŸ†แž„แž“แŸ… rmuhamedgaliev/jenkins_docker.

แž–แŸแž›แž€แŸ†แž–แžปแž„แžŸแžšแžŸแŸแžšแžขแžแŸ’แžแž”แž‘แž“แŸแŸ‡ แž€แžถแžšแž–แžทแž—แžถแž€แŸ’แžŸแžถแž˜แžฝแž™แž”แžถแž“แž€แžพแžแžกแžพแž„แžขแŸ†แž–แžธแž€แžถแžšแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž—แŸ’แž“แžถแž€แŸ‹แž„แžถแžšแž“แŸ…แž›แžพแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแž–แžธแž…แž˜แŸ’แž„แžถแž™ แžŠแžพแž˜แŸ’แž”แžธแž€แžปแŸ†แžฑแŸ’แž™แž•แŸ’แž‘แžปแž€แžแŸ’แž“แžถแŸ†แž„แž˜แŸแžŠแŸ„แž™แž”แŸ’แžšแžพแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‡แŸ†แž“แžฝแž™ docker-plugin. แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžแŸ’แž‰แžปแŸ†แž“แžนแž„แž“แžทแž™แžถแž™แžขแŸ†แž–แžธแžšแžฟแž„แž“แŸแŸ‡แž“แŸ…แž–แŸแž›แžขแž“แžถแž‚แžแŸ”

แž”แŸ’แžšแž—แž–: www.habr.com

แž‘แžทแž‰แž€แžถแžšแž”แž„แŸ’แž แŸ„แŸ‡แžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แž˜แžถแž“แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS, แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS ๐Ÿ”ฅ แž‘แžทแž‰แžŸแŸแžœแžถแž”แž„แŸ’แž แŸ„แŸ‡แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS แž“แžทแž„แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS | ProHoster