Како Π΄Π° собиратС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π²ΠΎ ЏСнкинс Π°ΠΊΠΎ Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ срСдини

Како Π΄Π° собиратС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π²ΠΎ ЏСнкинс Π°ΠΊΠΎ Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ срСдини

Има ΠΌΠ½ΠΎΠ³Ρƒ написи Π½Π° Π₯Π°Π±Ρ€Π΅ Π·Π° ЏСнкинс, Π½ΠΎ ΠΌΠ°Π»ΠΊΡƒΠΌΠΈΠ½Π° ΠΎΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π°Ρ‚ ЏСнкинс ΠΈ докСрскитС Π°Π³Π΅Π½Ρ‚ΠΈ. Π‘ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡƒΠ»Π°Ρ€Π½ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ Drone.io, Bitbucket гасовод, GitLab, Π”Π΅Ρ˜ΡΡ‚Π²Π° Π½Π° GitHub ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ, ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° собСрат сè Π²ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ. Но, ΡˆΡ‚ΠΎ Π΅ со ЏСнкинс?

ДСнСс ΠΈΠΌΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚: ЏСнкинс 2 ΠΎΠ΄Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ со Π½Π΅Π³ΠΎ Π”ΠΎΠΊΠ΅Ρ€ Π°Π³Π΅Π½Ρ‚ΠΈ. Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° сакам Π΄Π° Π³ΠΎ сподСлам ΠΌΠΎΠ΅Ρ‚ΠΎ искуство ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ°.

Π—ΠΎΡˆΡ‚ΠΎ ΠΏΠΎΡ‡Π½Π°Π² Π΄Π° Π³ΠΎ Ρ€Π΅ΡˆΠ°Π²Π°ΠΌ овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ?

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ смС Π²ΠΎ Π΄Ρ€ΡƒΡˆΡ‚Π²ΠΎ Π¦ΠΈΡ‚Ρ€ΠΎΠ½ΠΈΡƒΠΌ Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ користимС ΠΌΠ½ΠΎΠ³Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΌΠΎΡ€Π°ΠΌΠ΅ Π΄Π° Ρ‡ΡƒΠ²Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° Node.JS, Gradle, Ruby, JDK ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π·Π° ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅. Но, чСстопати Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π°. Π”Π°, ќС Π±ΠΈΠ΄Π΅Ρ‚Π΅ Π²ΠΎ ΠΏΡ€Π°Π²ΠΎ Π°ΠΊΠΎ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ΠΈ Π·Π° Π²Π΅Ρ€Π·ΠΈΠΈ ΠΊΠ°ΠΊΠΎ nvm, rvm, Π½ΠΎ Π½Π΅ Π΅ сè Ρ‚Π°ΠΊΠ° ΠΌΠ°Π·Π½ΠΎ со Π½ΠΈΠ² ΠΈ ΠΎΠ²ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π° ΠΈΠΌΠ°Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

  • Π³ΠΎΠ»Π΅ΠΌΠ° ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π° Π½Π° Ρ‚Ρ€Π°Π΅ΡšΠ΅ ΡˆΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π·Π°Π±ΠΎΡ€Π°Π²Π°Π°Ρ‚ Π΄Π° Π³ΠΎ исчистат;
  • ΠΈΠΌΠ° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° исто Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‚Ρ€Π°Π΅ΡšΠ΅;
  • БСкој Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ ΠΈΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ сСт Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ.

Има ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π½ΠΎ Π΄Π° Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

ЏСнкинс Π²ΠΎ Π”ΠΎΠΊΠ΅Ρ€

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ Docker сСга Π΅ Π΄ΠΎΠ±Ρ€ΠΎ воспоставСн Π²ΠΎ свСтот Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚, рСчиси сè ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ со помош Π½Π° Docker. ΠœΠΎΠ΅Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΅ Π΄Π° Π³ΠΎ ΠΈΠΌΠ°ΠΌ ЏСнкинс Π²ΠΎ Π”ΠΎΠΊΠ΅Ρ€ ΠΈ Π΄Π° ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΠΌ со Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ Π½Π° Π”ΠΎΠΊΠ΅Ρ€. Ова ΠΏΡ€Π°ΡˆΠ°ΡšΠ΅ ΠΏΠΎΡ‡Π½Π° Π΄Π° сС поставува ΡƒΡˆΡ‚Π΅ Π²ΠΎ 2013 Π³ΠΎΠ΄ΠΈΠ½Π° Π²ΠΎ ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° β€žDocker сСга ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ Docker".

Накратко, само Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ инсталиратС самиот Docker Π²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ ΠΈ Π΄Π° ја ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° /var/run/docker.sock.

Π•Π²Π΅ Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Dockerfile ΡˆΡ‚ΠΎ сС ΠΏΠΎΠΊΠ°ΠΆΠ° Π·Π° ЏСнкинс.

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 ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ кој ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Docker ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° домаќин.

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅

НСодамна ЏСнкинс Π΄ΠΎΠ±ΠΈ моТност Π΄Π° Π³ΠΈ опишС своитС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Гасоводот синтакса, ΡˆΡ‚ΠΎ Π³ΠΎ олСснува ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° скриптата Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ.

Π—Π½Π°Ρ‡ΠΈ, Π΄Π° ставимС ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π΅Π½ Dockerfile Π²ΠΎ самото ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅, ΠΊΠΎΠ΅ ќС Π³ΠΈ содрТи ситС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π°. На овој Π½Π°Ρ‡ΠΈΠ½, самиот Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π»ΠΈΠ²Π° срСдина ΠΈ Π½Π΅ΠΌΠ° Π΄Π° ΠΌΠΎΡ€Π° Π΄Π° Π±Π°Ρ€Π° ΠΎΠ΄ OPS Π΄Π° инсталира ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Node.JS Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚.

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ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅:

  • ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚ Π·Π° ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ спорСд Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° ΠΈΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅;
  • Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π³ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΊΠ°ΠΊΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π²Π½Π°Ρ‚Ρ€Π΅ Π²ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚.

И вСќС Π²ΠΎ Ρ‡Π΅ΠΊΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΡƒΠΊΠ°ΠΆΡƒΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠ°Ρ‚ Π²Π½Π°Ρ‚Ρ€Π΅ Π²ΠΎ Π°Π³Π΅Π½Ρ‚ΠΎΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° Docker. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ сè, ΠΏΠ° Π·Π°Ρ‚ΠΎΠ° стартувам ΠΈ Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ansible.

ΠŸΠΎΠ΄ΠΎΠ»Ρƒ сакам Π΄Π° ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ‡ΠΊΠΈ Jenkinsfile ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ Сдноставна Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€