เบงเบดเบ—เบตเบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ Jenkins เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบ

เบงเบดเบ—เบตเบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ Jenkins เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบ

เบกเบตเบซเบผเบฒเบเบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบš Habre เบเปˆเบฝเบงเบเบฑเบš Jenkins, เปเบ•เปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™ Jenkins เปเบฅเบฐเบ•เบปเบงเปเบ—เบ™ docker เป€เบฎเบฑเบ”เบงเบฝเบ. เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเปเปˆเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบŠเบฑเปˆเบ™ Drone.io, เบ—เปเปˆ Bitbucket, GitLab, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” GitHub เปเบฅเบฐเบญเบทเปˆเบ™เป†, เบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™เบ–เบฑเบ‡. เปเบ•เปˆ Jenkins เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบกเบทเป‰โ€‹เบ™เบตเป‰โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹: Jenkins 2 เปเบกเปˆเบ™โ€‹เบ”เบตโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบฎเปˆเบงเบกโ€‹เบเบฑเบšโ€‹ เบ•เบปเบงเปเบ—เบ™ Docker. เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบ‚เป‰เบญเบเบขเบฒเบเปเบšเปˆเบ‡เบ›เบฑเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เป‰เบงเบเบ•เบปเบงเป€เบญเบ‡.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เป€เบฅเบตเปˆเบกเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰?

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™เบšเปเบฅเบดเบชเบฑเบ” เบŠเบดเป‚เบ—เบ™เบฝเบก เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ™เปเบฒเปƒเบŠเป‰เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบฎเบฑเบเบชเบฒเบชเบฐเบšเบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡ Node.JS, Gradle, Ruby, JDK เปเบฅเบฐเบญเบทเปˆเบ™เป†เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ›เบฐเบเบญเบš. เปเบ•เปˆเป€เบฅเบทเป‰เบญเบเป†เบ„เบงเบฒเบกเบ‚เบฑเบ”เปเบเป‰เบ‡เบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบšเปเปˆเบชเบฒเบกเบฒเบ”เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เป„เบ”เป‰. เปเบกเปˆเบ™เปเบฅเป‰เบง, เป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบ–เบทเบเบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบกเบตเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบฎเบธเปˆเบ™เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™: nvm, rvm, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเบฅเบฝเบšเบ‡เปˆเบฒเบเบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเปเบฅเบฐเบงเบดเบ—เบตเปเบเป‰เป„เบ‚เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบกเบตเบšเบฑเบ™เบซเบฒ:

  • เบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เป€เบงเบฅเบฒเปเบฅเปˆเบ™เบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบทเบกเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”;
  • เบกเบตเบ‚เปเป‰เบ‚เบฑเบ”เปเบเปˆเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบฅเบธเป‰เบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡ runtime เบ”เบฝเบงเบเบฑเบ™;
  • เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบธเบเบ„เบปเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบธเบ”เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบกเบตเบšเบฑเบ™เบซเบฒเบญเบทเปˆเบ™เป†, เปเบ•เปˆเปƒเบซเป‰เบ‚เป‰เบญเบเบšเบญเบเป€เบˆเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚.

Jenkins เปƒเบ™ Docker

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ Docker เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เป„เบ”เป‰เบ”เบตเปƒเบ™เป‚เบฅเบเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เป€เบเบทเบญเบšเบ—เบธเบเบขเปˆเบฒเบ‡เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ”เบเปƒเบŠเป‰ Docker. เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบต Jenkins เปƒเบ™ Docker เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Docker container เบญเบทเปˆเบ™เป†. เบ„เปเบฒเบ–เบฒเบกเบ™เบตเป‰เป€เบฅเบตเปˆเบกเบ–เบทเบเบ–เบฒเบกเบ„เบทเบ™เปƒเบ™เบ›เบต 2013 เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก "เบ”เบฝเบงเบ™เบตเป‰ 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 เบกเบตเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‚เบญเบ‡เบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ เบ—เปเปˆเบ™เป‰เปเบฒ syntax, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เบชเบฐเบ„เบดเบšเบชเป‰เบฒเบ‡เปเบฅเบฐเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ repository.

เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เป€เบฎเบปเบฒเปƒเบชเปˆ Dockerfile เบžเบดเป€เบชเบ”เปƒเบ™ repository เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เบงเบดเบ—เบตเบ™เบตเป‰, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เบปเบงเป€เบญเบ‡เบชเบฒเบกเบฒเบ”เบเบฐเบเบฝเบกเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเป„เบ”เป‰เปเบฅเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ‚เปเปƒเบซเป‰ 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เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธ:

  • เบŠเบทเปˆเบ‚เบญเบ‡เบ–เบฑเบ‡เบ›เบฐเบเบญเบšเบ•เบฒเบกเบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบŠเบทเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™;
  • arguments เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ build container, เบšเปˆเบญเบ™เบ—เบตเปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบžเบงเบเป€เบฎเบปเบฒ mount เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™เป€เบ›เบฑเบ™ directory เบžเบฒเบเปƒเบ™ 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.

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ—เบ™เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เป‚เบซเบฅเบ” master node เป‚เบ”เบเปƒเบŠเป‰ plugin. docker-plugin. เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™