Как Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π² Jenkins, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ срСди

Как Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π² Jenkins, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ срСди

Π’ HabrΓ© ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ статии Π·Π° ДТСнкинс, Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ описват ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ работят ДТСнкинс ΠΈ Π΄ΠΎΠΊΠ΅Ρ€ Π°Π³Π΅Π½Ρ‚ΠΈΡ‚Π΅. Всички популярни инструмСнти Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ Drone.io, Bitbucket Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄, GitLab, GitHub дСйствия ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ всичко Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Но ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° ДТСнкинс?

ДнСс ΠΈΠΌΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Jenkins 2 Π΅ страхотСн Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π”ΠΎΠΊΠ΅Ρ€ Π°Π³Π΅Π½Ρ‚ΠΈ. Π’ Ρ‚Π°Π·ΠΈ статия искам Π΄Π° сподСля ΠΎΠΏΠΈΡ‚Π° си ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ сами.

Π—Π°Ρ‰ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ… Π΄Π° Ρ€Π΅ΡˆΠ°Π²Π°ΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ?

Въй ΠΊΠ°Ρ‚ΠΎ смС Π² компания Π¦ΠΈΡ‚Ρ€ΠΎΠ½ΠΈΠΉ Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, трябва Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° Node.JS, Gradle, Ruby, JDK ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π° асСмблиращата машина. Но чСсто ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° вСрсиитС Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ΠΈ. Π”Π°, Ρ‰Π΅ Π±ΡŠΠ΄Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈ, Π°ΠΊΠΎ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅, Ρ‡Π΅ ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ Π½Π° вСрсии ΠΊΠ°Ρ‚ΠΎ nvm, rvm, Π½ΠΎ Π½Π΅ всичко Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π³Π»Π°Π΄ΠΊΠΎ с тях ΠΈ Ρ‚Π΅Π·ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΠ°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

  • голямо количСство Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ забравят Π΄Π° почистят;
  • ΠΈΠΌΠ° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС;
  • ВсСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ.

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

ДТСнкинс Π² Docker

Въй ΠΊΠ°Ρ‚ΠΎ Docker Π²Π΅Ρ‡Π΅ Π΅ Π΄ΠΎΠ±Ρ€Π΅ установСн Π² свСта Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°, ΠΏΠΎΡ‡Ρ‚ΠΈ всичко ΠΌΠΎΠΆΠ΅ Π΄Π° сС стартира с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Docker. ΠœΠΎΠ΅Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΅ Π΄Π° ΠΈΠΌΠ°ΠΌ Jenkins Π² 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/

ΠžΠΏΠΈΡΠ°Ρ…ΠΌΠ΅ асСмблиращата срСда, Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ° ДТСнкинс с нСя? И Π°Π³Π΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° 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ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС:

  • ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° сглобяванС спорСд Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅;
  • Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° стартиранС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π² нашия случай ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° дирСктория ΠΊΠ°Ρ‚ΠΎ дирСктория Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

И ΠΎΡ‰Π΅ Π² ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½ΠΈΠ΅ посочвамС ΠΊΠΎΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ Π² Π°Π³Π΅Π½Ρ‚Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€