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 noJenkins, kodwa zimbalwa ezichaza isibonelo sendlela ama-ejenti akwa-Jenkins nama-Docker asebenza ngayo. Wonke amathuluzi okwakha amaphrojekthi adumile afana I-Drone.io, Ipayipi le-Bitbucket, I-GitLab, Izenzo ze-GitHub nabanye bangakha yonke into ezitsheni. Kodwa kuthiwani ngoJenkins?

Namuhla kunesixazululo senkinga: Jenkins 2 muhle ekusebenzeni naye Ama-Docker agentsKulesi sihloko, ngifuna ukwabelana ngolwazi lwami futhi ngikubonise ukuthi ungakwenza kanjani lokhu ngokwakho.

Kungani ngiqale ukuxazulula le nkinga?

Njengoba sisenkampanini I-Citronium Njengoba sisebenzisa ubuchwepheshe obuhlukahlukene, kufanele sigcine izinguqulo ezihlukene ze-Node.JS, Gradle, Ruby, JDK, nezinye emshinini wokwakha. Kodwa izingxabano zenguqulo ngokuvamile azinakugwenywa. Yize ungahle usho ukuthi kukhona abaphathi benguqulo abahlukahlukene njenge-nvm ne-rvm, abalona ucezu lwekhekhe njalo, futhi lezi zixazululo zinezinkinga zazo:

  • umthamo omkhulu wezikhathi zokusebenza abathuthukisi abakhohlwa ukuzihlanza;
  • kukhona ukungqubuzana phakathi kwezinguqulo ezahlukene zezikhathi zokusebenza ezifanayo;
  • Unjiniyela ngamunye udinga isethi ehlukile yezingxenye.

Zikhona ezinye izinkinga, kodwa ake ngikutshele ngesixazululo.

UJenkins e-Docker

Njengoba i-Docker isisungulwe kahle emhlabeni wokuthuthuka, cishe yonke into ingaqhutshwa kusetshenziswa i-Docker. Isixazululo sami ukuthi ngibe noJenkins ku-Docker futhi ngikwazi ukusebenzisa ezinye iziqukathi ze-Docker. Lo mbuzo waqala ukuphendulwa 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 se-Dockerfile ephumele 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, uJenkins uthole ikhono lokuchaza imithetho yayo esebenzisa Iphayiphi i-syntax, eyenza kube lula ukushintsha iskripthi sokwakha bese usigcina endaweni yokugcina.

Ngakho-ke ake sibeke i-Dockerfile ekhethekile endaweni yokugcina, equkethe yonke imitapo yolwazi edingekayo ekwakheni. Ngale ndlela, umthuthukisi angalungiselela indawo ephindaphindwayo ngaphandle kokuthi 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. Kodwa kuthiwani uma, ngokwesibonelo, udinga isithombe se-JVM sephrojekthi eneskena se-Sonar esihlanganisiwe? Ukhululekile ukukhetha izingxenye ozidingayo ekwakheni.

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/

Siyichazile indawo yokwakha, kodwa uJenkins uhlangene ngani nayo? Ama-ejenti we-Jenkins angasebenza nalezi zithombe ze-Docker futhi akhe ngaphakathi kwazo.

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

Isiqondiso agent isebenzisa impahla docker, lapho ungacacisa khona:

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

Futhi ezinyathelweni zokwakha, sicacisa ukuthi yimiphi imiyalo okufanele isebenze ngaphakathi kwe-ejenti yokwakha ye-Docker. Lokhu kungaba noma yini, ngakho-ke futhi ngisebenzisa ukuthunyelwa kwezinhlelo zokusebenza ngisebenzisa i-Ansible.

Ngezansi ngifuna ukukhombisa i-Jenkinsfile evamile engakha uhlelo lokusebenza 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()
        }
    }

}

Pho kwenzekani?

Sisebenzisa le ndlela, saxazulula izinkinga ezilandelayo:

  • isikhathi sokumisa indawo yokwakha sincishisiwe sibe yimizuzu eyi-10-15 iphrojekthi ngayinye;
  • indawo yokwakha ephindaphindwayo ngokugcwele, njengoba ingabuye yakhiwe kukhompyutha yendawo;
  • azikho izinkinga ngezingxabano phakathi kwezinguqulo ezahlukene zamathuluzi okwakha;
  • njalo indawo yokusebenza ehlanzekile engamidi.

Isixazululo ngokwaso silula futhi sisobala, futhi sinikeza izinzuzo kuphela. Yebo, umgoqo wokungena uphakeme kancane kunemiyalelo yokwakha elula, kodwa manje kunesiqinisekiso sokuthi isakhiwo sizohlala sisebenza, futhi unjiniyela angakhetha yonke into ayidingayo ngenqubo yabo yokwakha.

Ungasebenzisa futhi isithombe engisihlanganisile. Jenkins + DockerYonke imithombo ivuliwe futhi ivuliwe rmuhamedgaliev/jenkins_docker.

Ngenkathi kubhalwa lesi sihloko, kube nengxoxo mayelana nokusebenzisa ama-ejenti kumaseva akude ukugwema ukulayisha i-master node nge-plugin. i-docker-pluginKodwa ngizokutshela ngalokhu esikhathini esizayo.

Source: www.habr.com

Thenga ukusingathwa okuthembekile kwamasayithi anokuvikelwa kwe-DDoS, amaseva e-VPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekile ngokuvikelwa kwe-DDoS, amaseva e-VPS VDS | ProHoster