Ungawaqoqa kanjani amaphrojekthi e-Jenkins uma udinga izindawo eziningi ezahlukene

Ungawaqoqa kanjani amaphrojekthi e-Jenkins uma udinga izindawo eziningi ezahlukene

Ziningi izindatshana ezimayelana no-Habré mayelana no-Jenkins, kodwa zimbalwa ezichaza izibonelo zendlela uJenkins nama-ejenti wedokodo asebenza ngayo. Wonke amathuluzi okwakha amaphrojekthi adumile afana I-Drone.io, Ipayipi le-Bitbucket, I-GitLab, Izenzo ze-GitHub nabanye, bangaqoqa yonke into ezitsheni. Kodwa kuthiwani ngoJenkins?

Namuhla kunesixazululo senkinga: Jenkins 2 muhle ekusebenzeni naye Ama-Docker agents. Kulesi sihloko ngifuna ukwabelana ngolwazi lwami futhi ngibonise ukuthi ungakwenza kanjani ngokwakho.

Kungani ngiqale ukuxazulula le nkinga?

Njengoba sihlangene I-Citronium Ngenxa yokuthi sisebenzisa ubuchwepheshe obuningi obuhlukahlukene, kufanele sigcine izinguqulo ezihlukene ze-Node.JS, Gradle, Ruby, JDK nezinye emshinini wokuhlanganisa. Kodwa ngokuvamile izingxabano zenguqulo azikwazi ukugwenywa. Yebo, uzobe uqinisile uma uthi kukhona abaphathi benguqulo abahlukahlukene njenge-nvm, rvm, kodwa akuyona yonke into ebushelelezi ngabo futhi lezi zixazululo zinezinkinga:

  • inani elikhulu lesikhathi sokusebenza abathuthukisi abakhohlwa ukulihlanza;
  • kukhona ukungqubuzana phakathi kwezinguqulo ezahlukene zezikhathi zokusebenza ezifanayo;
  • Wonke umthuthukisi udinga isethi ehlukile yezingxenye.

Zikhona ezinye izinkinga, kodwa ake ngikutshele ngesixazululo.

UJenkins e-Docker

Njengoba i-Docker isisungulwe kahle emhlabeni wokuthuthuka, cishe noma yini ingaqhutshwa kusetshenziswa i-Docker. Isixazululo sami ukuthi ngibe noJenkins ku-Docker futhi ngikwazi ukusebenzisa ezinye iziqukathi ze-Docker. Lo mbuzo waqala ukubuzwa emuva ngo-2013 esihlokweni esithi “I-Docker manje ingasebenza ngaphakathi kwe-Docker".

Ngamafuphi, udinga nje ukufaka i-Docker ngokwayo esitsheni esisebenzayo bese ufaka ifayela /var/run/docker.sock.

Nasi isibonelo i-Dockerfile eyaphumela ku-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

Ngakho-ke, sithole isitsha se-Docker esingakhipha imiyalo ye-Docker emshinini wokusingathwa.

Yakha isethaphu

Kungekudala iJenkins ithole ithuba lokuchaza imithetho yayo isebenzisa Iphayiphi i-syntax, eyenza kube lula ukushintsha iskripthi sokwakha bese usigcina endaweni yokugcina.

Ngakho-ke ake sibeke i-Dockerfile ekhethekile endaweni yokugcina, ezoqukatha yonke imitapo yolwazi edingekayo ekwakheni. Ngale ndlela, unjiniyela ngokwakhe angakwazi ukulungiselela indawo ephindaphindwayo futhi ngeke kudingeke ukuthi acele i-OPS ukuthi ifake inguqulo ethile ye-Node.JS kumsingathi.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Lesi sithombe sokwakha sifanelekele izinhlelo zokusebenza eziningi ze-Node.JS. Kuthiwani uma, ngokwesibonelo, udinga isithombe sephrojekthi ye-JVM eneskena se-Sonar esifakwe ngaphakathi? Ukhululekile ukukhetha izingxenye ozidingayo ukuze uhlanganise.

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/

Sichaze indawo yomhlangano, kodwa uJenkins uhlangene ngani nayo? Futhi ama-agent we-Jenkins angasebenza ngezithombe ezinjalo ze-Docker futhi azakhe ngaphakathi.

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

Isiqondisi agent isebenzisa impahla dockerlapho ungacacisa khona:

  • igama lesiqukathi somhlangano ngokwenqubomgomo yakho yokuqamba amagama;
  • izimpikiswano ezidingekayo ukuze kuqhutshwe isitsha sokwakha, lapho kithi sikhweza uhla lwemibhalo lwamanje njengohla lwemibhalo ngaphakathi kwesiqukathi.

Futhi vele ezinyathelweni zokwakha sibonisa ukuthi yimiphi imiyalo okufanele yenziwe ngaphakathi kwe-ejenti yokwakha ye-Docker. Lokhu kungaba noma yini, ngakho-ke futhi ngethula ukuthunyelwa kohlelo lokusebenza ngisebenzisa i-ansible.

Ngezansi ngifuna ukukhombisa i-Jenkinsfile ejwayelekile engakhiwa uhlelo olulula lwe-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()
        }
    }

}

Kwenzenjani?

Ngenxa yale ndlela, sixazulule izinkinga ezilandelayo:

  • isikhathi sokumisa umhlangano wemvelo sincishisiwe sibe yimizuzu eyi-10 - 15 iphrojekthi ngayinye;
  • indawo yokwakha yohlelo lokusebenza ephindaphindeka ngokuphelele, njengoba ungayakha ngale ndlela kukhompyutha yakho yangakini;
  • azikho izinkinga ngokungqubuzana phakathi kwezinguqulo ezahlukene zamathuluzi omhlangano;
  • njalo indawo yokusebenza ehlanzekile engavaleki.

Isixazululo ngokwaso silula futhi sisobala futhi sikuvumela ukuthi uthole izinzuzo ezithile. Yebo, umkhawulo wokungena ukhuphuke kancane uma kuqhathaniswa nemiyalo elula yemihlangano, kodwa manje kunesiqinisekiso sokuthi izokwakhiwa njalo futhi umthuthukisi ngokwakhe angakhetha konke okudingekayo kwinqubo yakhe yokwakha.

Ungasebenzisa futhi isithombe engisiqoqile Jenkins + Docker. Yonke imithombo ivuliwe futhi itholakala rmuhamedgaliev/jenkins_docker.

Ngenkathi kubhalwa lesi sihloko, kwaphakama ingxoxo mayelana nokusebenzisa ama-ejenti kumaseva akude ukuze angalayishi i-master node usebenzisa i-plugin. i-docker-plugin. Kodwa ngizokhuluma ngalokhu esikhathini esizayo.

Source: www.habr.com

Engeza amazwana