Эгер сизге ар кандай чөйрөлөр керек болсо, Дженкинстеги долбоорлорду кантип чогултуу керек

Эгер сизге ар кандай чөйрөлөр керек болсо, Дженкинстеги долбоорлорду кантип чогултуу керек

Хабреде Дженкинс жөнүндө көптөгөн макалалар бар, бирок Дженкинс жана докер агенттери кандай иштээри жөнүндө мисалдар аз. сыяктуу бардык популярдуу долбоор куруу куралдары Drone.io, Bitbucket Pipeline, GitLab, GitHub аракеттери жана башкалар, баарын контейнерлерге чогулта алышат. Бирок Дженкинс жөнүндө эмне айтууга болот?

Бүгүнкү күндө маселенин бир чечими бар: Jenkins 2 менен иштөө абдан жакшы Докер агенттери. Бул макалада мен өз тажрыйбам менен бөлүшкүм келет жана муну өзүңүз кантип кыла аларыңызды көрсөткүм келет.

Эмне үчүн мен бул маселени чече баштадым?

Биз компанияда болгондуктан Citronium Биз көптөгөн ар кандай технологияларды колдонгондуктан, Node.JS, Gradle, Ruby, JDK жана башкалардын ар кандай версияларын монтаждоочу машинада сактоого туура келет. Бирок көп учурда версия конфликттерин болтурбоо мүмкүн эмес. Ооба, эгер сиз nvm, rvm сыяктуу ар кандай версия менеджерлери бар деп айтсаңыз, туура болосуз, бирок алар менен баары бирдей эмес жана бул чечимдерде көйгөйлөр бар:

  • иштеп чыгуучулар тазалоону унуткан чоң көлөмдөгү иштөө убактысы;
  • бирдей иштөө убакыттарынын ар кандай версияларынын ортосунда карама-каршылыктар бар;
  • Ар бир иштеп чыгуучуга ар кандай компоненттердин топтому керек.

Башка көйгөйлөр бар, бирок чечүү жолун айтып берейин.

Дженкинс Докерде

Докер азыр өнүгүү дүйнөсүндө жакшы орнотулгандыктан, Docker аркылуу дээрлик бардык нерсени иштетсе болот. Менин чечимим Дженкинстин Докерде болушу жана башка Docker контейнерлерин иштете алуу. Бул суроо кайра 2013-жылы макалада бериле баштаган.Docker азыр Docker ичинде иштей алат".

Кыскача айтканда, сиз Dockerдин өзүн жумушчу контейнерге орнотуп, файлды орнотууңуз керек /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

Ошентип, биз хост машинасында Docker буйруктарын аткара ала турган Docker контейнерине ээ болдук.

Куруу орнотуу

Жакында Дженкинс өзүнүн эрежелерин колдонуу менен сүрөттөөгө мүмкүнчүлүк алды түтүк синтаксис, бул куруу сценарийин өзгөртүүнү жана аны репозиторийде сактоону оңой кылат.

Ошентип, келгиле, репозиторийдин өзүнө атайын Dockerfile салалы, анда курууга керектүү бардык китепканалар камтылат. Ошентип, иштеп чыгуучу өзү кайталануучу чөйрөнү даярдай алат жана OPS'тен Node.JSтин белгилүү бир версиясын хостко орнотууну талап кылбайт.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Бул куруу сүрөтү Node.JS колдонмолорунун көпчүлүгүнө ылайыктуу. Мисалы, сизге Sonar сканери бар 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 аркылуу тиркемени жайылтууну ишке киргизем.

Төмөндө мен жөнөкөй Node.JS тиркемеси кура ала турган жалпы Jenkinsfile көрсөткүм келет.

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 мүнөткө чейин кыскарган;
  • толугу менен кайталануучу тиркеме куруу чөйрөсү, анткени сиз аны жергиликтүү компьютериңизде ушундай жол менен кура аласыз;
  • монтаждоо куралдарынын ар кандай версияларынын ортосундагы чыр-чатактар ​​менен эч кандай көйгөйлөр жок;
  • ар дайым тыгылып калбаган таза жумушчу мейкиндиги.

Чечимдин өзү жөнөкөй жана айкын жана кээ бир артыкчылыктарды алууга мүмкүндүк берет. Ооба, кирүү босогосу жыйындар үчүн жөнөкөй буйруктарга салыштырмалуу бир аз көтөрүлдү, бирок азыр ал ар дайым курула турганына кепилдик бар жана иштеп чыгуучу өзү куруу процесси үчүн зарыл болгон нерселердин баарын тандап алат.

Мен чогулткан сүрөттү да колдонсоңуз болот Дженкинс + Докер. Бардык булактар ​​ачык жана жайгашкан rmuhamedgliev/jenkins_docker.

Бул макаланы жазып жатканда, плагин аркылуу башкы түйүндү жүктөбөш үчүн, алыскы серверлерде агенттерди колдонуу жөнүндө талкуу пайда болду докер-плагин. Бирок бул тууралуу келечекте айтам.

Source: www.habr.com

Комментарий кошуу