Како ΠΏΡ€ΠΈΠΊΡƒΠΏΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π΅ Ρƒ ΠˆΠ΅Π½ΠΊΠΈΠ½ΡΡƒ Π°ΠΊΠΎ Π²Π°ΠΌ Ρ‚Ρ€Π΅Π±Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ°

Како ΠΏΡ€ΠΈΠΊΡƒΠΏΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π΅ Ρƒ ΠˆΠ΅Π½ΠΊΠΈΠ½ΡΡƒ Π°ΠΊΠΎ Π²Π°ΠΌ Ρ‚Ρ€Π΅Π±Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ°

ΠŸΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π»Π°Π½Π°ΠΊΠ° Π½Π° Π₯Π°Π±Ρ€Π΅Ρƒ ΠΎ ЏСнкинсу, Π°Π»ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΎΠΏΠΈΡΡƒΡ˜Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡˆΡƒ ЏСнкинс ΠΈ Π΄ΠΎΡ†ΠΊΠ΅Ρ€ Π°Π³Π΅Π½Ρ‚ΠΈ. Π‘Π²ΠΈ ΠΏΠΎΠΏΡƒΠ»Π°Ρ€Π½ΠΈ Π°Π»Π°Ρ‚ΠΈ Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚Π° ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ су Π”Ρ€ΠΎΠ½Π΅.ΠΈΠΎ, Π‘ΠΈΡ‚Π±ΡƒΡ†ΠΊΠ΅Ρ‚ ПипСлинС, Π“ΠΈΡ‚Π›Π°Π±, Π“ΠΈΡ‚Π₯ΡƒΠ± Π°ΠΊΡ†ΠΈΡ˜Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ, ΠΌΠΎΠ³Ρƒ свС скупити Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅. Али ΡˆΡ‚Π° јС са ЏСнкинсом?

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

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

ΠŸΠΎΡˆΡ‚ΠΎ смо Ρƒ Π΄Ρ€ΡƒΡˆΡ‚Π²Ρƒ Π¦ΠΈΡ‚Ρ€ΠΎΠ½ΠΈΡ˜ΡƒΠΌ ΠŸΠΎΡˆΡ‚ΠΎ користимо ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π°, ΠΌΠΎΡ€Π°ΠΌΠΎ Π΄Π° Π·Π°Π΄Ρ€ΠΆΠΈΠΌΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ НодС.ЈБ, Π“Ρ€Π°Π΄Π»Π΅, Π ΡƒΠ±ΠΈ, ΠˆΠ”Πš ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π° машини Π·Π° склапањС. Али чСсто сС сукоби Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΠ·Π±Π΅Ρ›ΠΈ. Π”Π°, Π±ΠΈΡ›Π΅Ρ‚Π΅ Ρƒ ΠΏΡ€Π°Π²Ρƒ Π°ΠΊΠΎ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈ ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ су Π½Π²ΠΌ, Ρ€Π²ΠΌ, Π°Π»ΠΈ нијС свС Ρ‚Π°ΠΊΠΎ Π³Π»Π°Ρ‚ΠΊΠΎ са њима ΠΈ ΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅ΡšΠ° ΠΈΠΌΠ°Ρ˜Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

  • Π²Π΅Π»ΠΈΠΊΠ° ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ° ΠΊΠΎΡ˜Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈ Π·Π°Π±ΠΎΡ€Π°Π²Ρ™Π°Ρ˜Ρƒ Π΄Π° очистС;
  • ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅ сукоби ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… Π²Π΅Ρ€Π·ΠΈΡ˜Π° истог Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ°;
  • Π‘Π²Π°ΠΊΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€Ρƒ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ Π΄Ρ€ΡƒΠ³Π°Ρ‡ΠΈΡ˜ΠΈ скуп ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ.

ΠŸΠΎΡΡ‚ΠΎΡ˜Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π°Π»ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ ΠΌΠΈ Π΄Π° Π²Π°ΠΌ ΠΊΠ°ΠΆΠ΅ΠΌ Π½Π΅ΡˆΡ‚ΠΎ ΠΎ Ρ€Π΅ΡˆΠ΅ΡšΡƒ.

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

ΠŸΠΎΡˆΡ‚ΠΎ јС Π”ΠΎΡ†ΠΊΠ΅Ρ€ сада Π΄ΠΎΠ±Ρ€ΠΎ успостављСн Ρƒ свСту Ρ€Π°Π·Π²ΠΎΡ˜Π°, скоро свС сС ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ ΠΏΠΎΠΌΠΎΡ›Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€Π°. МојС Ρ€Π΅ΡˆΠ΅ΡšΠ΅ јС Π΄Π° ΠΈΠΌΠ°ΠΌ ЏСнкинса Ρƒ Π”ΠΎΡ†ΠΊΠ΅Ρ€-Ρƒ ΠΈ Π΄Π° Π±ΡƒΠ΄Π΅ΠΌ Ρƒ могућности Π΄Π° ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌ Π΄Ρ€ΡƒΠ³Π΅ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π΅. Ово ΠΏΠΈΡ‚Π°ΡšΠ΅ јС ΠΏΠΎΡ‡Π΅Π»ΠΎ Π΄Π° сС поставља још 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

Π’Π°ΠΊΠΎ смо Π΄ΠΎΠ±ΠΈΠ»ΠΈ Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ који ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½Π° главној машини.

Π‘ΡƒΠΈΠ»Π΄ сСтуп

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

Π”Π°ΠΊΠ»Π΅, ставимо посСбан Π”ΠΎΡ†ΠΊΠ΅Ρ€Ρ„ΠΈΠ»Π΅ Ρƒ само ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅, који Ρ›Π΅ садрТати свС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½Π΅ Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅. На овај Π½Π°Ρ‡ΠΈΠ½, сам ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠΏΡ€Π΅ΠΌΠΈ ΠΏΠΎΠ½ΠΎΠ²Ρ™ΠΈΠ²ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅ ΠΈ Π½Π΅Ρ›Π΅ ΠΌΠΎΡ€Π°Ρ‚ΠΈ Π΄Π° Ρ‚Ρ€Π°ΠΆΠΈ ΠΎΠ΄ ОПБ-Π° Π΄Π° инсталира ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ НодС.ЈБ-Π° Π½Π° хосту.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Ова слика ΠΈΠ·Ρ€Π°Π΄Π΅ јС ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° Π²Π΅Ρ›ΠΈΠ½Ρƒ НодС.ЈБ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°. Π¨Ρ‚Π° Π°ΠΊΠΎ Π²Π°ΠΌ јС, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° слика Π·Π° ΠˆΠ’Πœ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ са ΡƒΠΊΡ™ΡƒΡ‡Π΅Π½ΠΈΠΌ Π‘ΠΎΠ½Π°Ρ€ скСнСром? Π‘Π»ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π±ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ којС су Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ Π·Π° ΠΌΠΎΠ½Ρ‚Π°ΠΆΡƒ.

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"
    }
}

Direktiva agent користи ΠΈΠΌΠΎΠ²ΠΈΠ½Ρƒ dockerΠ³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ΄Ρ€Π΅Π΄ΠΈΡ‚ΠΈ:

  • Π½Π°Π·ΠΈΠ² ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π·Π° склапањС ΠΏΡ€Π΅ΠΌΠ° вашој ΠΏΠΎΠ»ΠΈΡ‚ΠΈΡ†ΠΈ имСновања;
  • Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π° Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄ΡšΡƒ, Π³Π΄Π΅ Ρƒ нашСм ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠΎ Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ ΠΊΠ°ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ ΡƒΠ½ΡƒΡ‚Π°Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€Π°.

И Π²Π΅Ρ› Ρƒ ΠΊΠΎΡ€Π°Ρ†ΠΈΠΌΠ° ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ΅ ΡƒΠΊΠ°Π·ΡƒΡ˜Π΅ΠΌΠΎ којС ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρ‚Ρ€Π΅Π±Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚ΠΈ ΡƒΠ½ΡƒΡ‚Π°Ρ€ Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π°Π³Π΅Π½Ρ‚Π° Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅. Ово ΠΌΠΎΠΆΠ΅ Π±ΠΈΡ‚ΠΈ Π±ΠΈΠ»ΠΎ ΡˆΡ‚Π°, Ρ‚Π°ΠΊΠΎ Π΄Π° Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ користСћи ансиблС.

Π£ наставку ΠΆΠ΅Π»ΠΈΠΌ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ‡ΠΊΠΈ ΠˆΠ΅Π½ΠΊΠΈΠ½ΡΡ„ΠΈΠ»Π΅ који ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π° НодС.ЈБ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°.

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 ΠΌΠΈΠ½ΡƒΡ‚Π° ΠΏΠΎ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Ρƒ;
  • ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ ΠΏΠΎΠ½ΠΎΠ²Ρ™ΠΈΠ²ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅ Π·Π° ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, ΠΏΠΎΡˆΡ‚ΠΎ Π³Π° Π½Π° овај Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚ΠΈ Π½Π° свом Π»ΠΎΠΊΠ°Π»Π½ΠΎΠΌ Ρ€Π°Ρ‡ΡƒΠ½Π°Ρ€Ρƒ;
  • Π½Π΅ΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° са сукобима ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π°Π»Π°Ρ‚Π° Π·Π° склапањС;
  • ΡƒΠ²Π΅ΠΊ чист Ρ€Π°Π΄Π½ΠΈ простор који сС Π½Π΅ Π·Π°ΠΏΡƒΡˆΠ°Π²Π°.

Π‘Π°ΠΌΠΎ Ρ€Π΅ΡˆΠ΅ΡšΠ΅ јС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ ΠΈ ΠΎΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ ΠΈ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π²Π°ΠΌ Π΄Π° Π΄ΠΎΠ±ΠΈΡ˜Π΅Ρ‚Π΅ Π½Π΅ΠΊΠ΅ прСдности. Π”Π°, ΡƒΠ»Π°Π·Π½ΠΈ ΠΏΡ€Π°Π³ јС ΠΌΠ°Π»ΠΎ порастао Ρƒ ΠΏΠΎΡ€Π΅Ρ’Π΅ΡšΡƒ са Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠ° Π·Π° склоповС, Π°Π»ΠΈ сада ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π³Π°Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π΄Π° Ρ›Π΅ ΡƒΠ²Π΅ΠΊ Π±ΠΈΡ‚ΠΈ ΠΈΠ·Π³Ρ€Π°Ρ’Π΅Π½ ΠΈ Π΄Π° сам ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π°Π±Ρ€Π°Ρ‚ΠΈ свС ΡˆΡ‚ΠΎ јС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π·Π° њСгов процСс ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ΅.

Π’Π°ΠΊΠΎΡ’Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ користити слику ΠΊΠΎΡ˜Ρƒ сам ΠΏΡ€ΠΈΠΊΡƒΠΏΠΈΠΎ ЈСнкинс + Π”ΠΎΡ†ΠΊΠ΅Ρ€. Π‘Π²ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΈ су ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ ΠΈ Π½Π°Π»Π°Π·Π΅ сС Π½Π° адрСси Ρ€ΠΌΡƒΡ…Π°ΠΌΠ΅Π΄Π³Π°Π»ΠΈΠ΅Π²/јСнкинс_Π΄ΠΎΡ†ΠΊΠ΅Ρ€.

Π’ΠΎΠΊΠΎΠΌ писања ΠΎΠ²ΠΎΠ³ Ρ‡Π»Π°Π½ΠΊΠ°, настала јС Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π° ΠΎ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΡƒ Π°Π³Π΅Π½Π°Ρ‚Π° Π½Π° ΡƒΠ΄Π°Ρ™Π΅Π½ΠΈΠΌ сСрвСрима ΠΊΠ°ΠΊΠΎ сС Π½Π΅ Π±ΠΈ ΡƒΡ‡ΠΈΡ‚Π°Π²Π°ΠΎ Π³Π»Π°Π²Π½ΠΈ Ρ‡Π²ΠΎΡ€ ΠΏΠΎΠΌΠΎΡ›Ρƒ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠ° Π΄ΠΎΡ†ΠΊΠ΅Ρ€-ΠΏΠ»ΡƒΠ³ΠΈΠ½. Али ΠΎ ΠΎΠ²ΠΎΠΌΠ΅ Ρ›Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΠΈ Ρƒ будућности.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

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