Sida loogu ururiyo mashaariicda Jenkins haddii aad u baahan tahay deegaan badan oo kala duwan

Sida loogu ururiyo mashaariicda Jenkins haddii aad u baahan tahay deegaan badan oo kala duwan

Waxaa jira maqaallo badan oo ku saabsan HabrΓ© oo ku saabsan Jenkins, laakiin in yar ayaa sharraxa tusaalooyinka sida Jenkins iyo wakiillada docker ay u shaqeeyaan. Dhammaan qalabka dhismaha mashruuca caanka ah sida Drone.io, Dhuumaha Bitbucket, GitLab, Falalka GitHub iyo kuwa kale, waxay ku ururin karaan wax walba weelasha. Laakiin ka waran Jenkins?

Maanta waxaa jira xal dhibaatada: Jenkins 2 waa ku fiican yahay la shaqeynta Wakiilada Docker. Maqaalkan waxaan rabaa in aan la wadaago waayo-aragnimadayda oo aan tuso sida aad adigu u samayn karto.

Maxaan u bilaabay xallinta dhibaatadan?

Maadaama aanu nahay shirkad Citronium Sababtoo ah waxaan isticmaalnaa teknooloji kala duwan, waa inaan ku haynaa noocyada kala duwan ee Node.JS, Gradle, Ruby, JDK iyo kuwa kale ee mashiinka shirarka. Laakiin inta badan khilaafyada nooca ah lama ilaalin karo. Haa, waad sax noqon doontaa haddii aad tiraahdo waxaa jira maareeyayaal nooc oo kala duwan sida nvm, rvm, laakiin wax walba kuma fududa iyaga oo xalalkani waxay leeyihiin dhibaatooyin:

  • qadar badan oo runtime ah oo horumariyayaashu iloobaan inay nadiifiyaan;
  • waxaa jira khilaafyo u dhexeeya noocyada kala duwan ee isla runtimes;
  • Horumariye kastaa wuxuu u baahan yahay qaybo kala duwan.

Dhibaatooyin kale ayaa jira, laakiin aan kuu sheego xalka.

Jenkins oo ku taal Docker

Maaddaama Docker uu hadda si wanaagsan uga dhex jiro adduunka horumarka, ku dhawaad ​​wax kasta ayaa lagu socodsiin karaa iyadoo la adeegsanayo Docker. Xalkaygu waa in aan Jenkins ku haysto Docker oo aan awoodo in aan socodsiiyo weelasha kale ee Docker. Su'aashan waxay bilaabatay in dib loo weydiiyo 2013 maqaalka "Docker hadda wuxuu ku socon karaa gudaha DockerΒ«.

Marka la soo koobo, waxaad u baahan tahay oo kaliya inaad ku rakibto Docker lafteeda weelka shaqada oo aad ku dhejiso faylka /var/run/docker.sock.

Waa kan tusaale Dockerfile oo u soo baxay 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

Markaa, waxaan helnay weel Docker ah oo fulin kara amarada Docker mashiinka martida loo yahay.

Dhis habaynta

Muddo aan fogayn ka hor Jenkins waxay heshay fursad ay ku qeexdo xeerarkeeda iyadoo la isticmaalayo Dhuumaha syntax, taas oo ka dhigaysa mid aad u fudud in la beddelo qoraalka dhismaha oo lagu kaydiyo kaydka.

Markaa aan dhigno Dockerfile gaar ah kaydka laftiisa, kaas oo ka koobnaan doona dhammaan maktabadaha lagama maarmaanka u ah dhismaha. Sidan, horumariyaha laftiisa ayaa diyaarin kara jawi lagu celin karo mana u baahan doono inuu waydiisto OPS inay ku rakibto nooc gaar ah oo Node.JS ah martida loo yahay.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Sawirka dhismuhu wuxuu ku habboon yahay badi codsiyada Node.JS. Maxaa dhacaya haddii, tusaale ahaan, aad u baahan tahay sawir mashruuca JVM oo leh iskaanka Sonar oo gudaha lagu soo daray? Xor ayaad u tahay inaad doorato qaybaha aad uga baahan tahay isu imaatinka.

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/

Waxaan ku qeexnay jawiga golaha, laakiin maxay Jenkins ka leedahay? Wakiilada Jenkins waxay la shaqeyn karaan sawirada Docker oo kale oo ay ku dhisi karaan gudaha.

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

Dardaaran agent waxay isticmaashaa hanti dockermeesha aad ku qeexi karto:

  • magaca weelka shirka sida waafaqsan siyaasaddaada magac;
  • doodaha loo baahan yahay si loo socodsiiyo weelka la dhisayo, halkaas oo xaaladdeenna aan ku dhejino tusaha hadda jira sida hagaha gudaha weelka.

Haddana talaabooyinka dhisitaanka waxaan ku tusinaynaa amarrada lagu fulinayo gudaha wakiilka dhismaha Docker. Tani waxay noqon kartaa wax kasta, sidaas darteed waxaan sidoo kale bilaabay geynta arjiga aniga oo isticmaalaya wax macquul ah.

Hoos waxaan rabaa in aan tuso Jenkinsfile guud in codsiga Node.JS uu dhisi karo.

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()
        }
    }

}

Maxaa dhacay?

Thanks to habkan, waxaan xallinay dhibaatooyinka soo socda:

  • Waqtiga qaabeynta isku dhafka deegaanka waxaa lagu dhimay 10 - 15 daqiiqo mashruuc kasta;
  • jawi dhismo codsi ah oo gebi ahaanba lagu celin karo, maadaama aad sidan ugu dhisi karto kombayutarka deegaankaaga;
  • ma jiraan wax dhibaato ah oo ku saabsan isku dhacyada u dhexeeya noocyada kala duwan ee qalabka isu-ururinta;
  • had iyo jeer goob shaqo oo nadiif ah oo aan xidhnayn.

Xalka laftiisa waa mid fudud oo muuqda wuxuuna kuu ogolaanayaa inaad hesho faa'iidooyin. Haa, heerka gelitaanka ayaa kor u kacay wax yar marka la barbardhigo amarrada fudud ee shirarka, laakiin hadda waxaa jira dammaanad ah in mar walba la dhisi doono iyo horumariyaha laftiisa ayaa dooran kara wax kasta oo lagama maarmaan u ah habka dhismihiisa.

Waxa kale oo aad isticmaali kartaa sawirka aan ururiyay Jenkins + Docker. Dhammaan ilaha way furan yihiin waxayna ku yaalaan rmuhamedgaliev/jenkins_docker.

Intii aan maqaalkan qorayay, dood ayaa ka dhalatay adeegsiga wakiilada ee server-yada fog-fog si aan loo shubin noodhka sayidkiisa iyadoo la adeegsanayo plugin docker-plugin. Laakiin tan mustaqbalka ayaan ka hadli doonaa.

Source: www.habr.com

Add a comment