Mar a chruinnicheas tu pròiseactan ann an Jenkins ma tha feum agad air mòran àrainneachdan eadar-dhealaichte

Mar a chruinnicheas tu pròiseactan ann an Jenkins ma tha feum agad air mòran àrainneachdan eadar-dhealaichte

Tha mòran artaigilean air Habré mu Jenkins, ach chan eil mòran a’ toirt cunntas air eisimpleirean air mar a tha Jenkins agus riochdairean docker ag obair. A h-uile inneal togail pròiseict mòr-chòrdte mar Drone.io, Pìoba Bitbucket, GitLab, Gnìomhan GitHub agus feadhainn eile, is urrainn dhaibh a h-uile càil a chruinneachadh ann an soithichean. Ach dè mu dheidhinn Jenkins?

An-diugh tha fuasgladh ann don duilgheadas: tha Jenkins 2 math air a bhith ag obair leis Luchd-ionaid docker. San artaigil seo tha mi airson m ’eòlas a cho-roinn agus sealltainn mar as urrainn dhut a dhèanamh leat fhèin.

Carson a thòisich mi air an duilgheadas seo fhuasgladh?

Leis gu bheil sinn ann an companaidh Citronium Leis gu bheil sinn a’ cleachdadh mòran theicneòlasan eadar-dhealaichte, feumaidh sinn dreachan eadar-dhealaichte de Node.JS, Gradle, Ruby, JDK agus feadhainn eile a chumail air an inneal cruinneachaidh. Ach gu tric chan urrainnear còmhstri dreach a sheachnadh. Bidh, bidh thu ceart ma chanas tu gu bheil grunn mhanaidsearan dreach ann mar nvm, rvm, ach chan eil a h-uile dad cho rèidh leotha agus tha duilgheadasan aig na fuasglaidhean sin:

  • tòrr ùine ruith a dhìochuimhnich luchd-leasachaidh a ghlanadh;
  • tha còmhstri eadar diofar dhreachan de na h-aon amannan ruith;
  • Feumaidh gach leasaiche seata eadar-dhealaichte de phàirtean.

Tha duilgheadasan eile ann, ach leig dhomh innse dhut mun fhuasgladh.

Jenkins ann an Docker

Leis gu bheil Docker a-nis stèidhichte gu math ann an saoghal leasachaidh, faodar cha mhòr rud sam bith a ruith le bhith a’ cleachdadh Docker. Is e am fuasgladh agam Jenkins a bhith ann an Docker agus a bhith comasach air soithichean Docker eile a ruith. Thòisich a’ cheist seo air ais ann an 2013 san artaigil “Faodaidh Docker a-nis ruith taobh a-staigh Docker".

Ann an ùine ghoirid, cha leig thu leas ach Docker fhèin a chuir a-steach ann an soitheach obrach agus am faidhle a chuir suas /var/run/docker.sock.

Seo eisimpleir Dockerfile a thionndaidh a-mach airson 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

Mar sin, fhuair sinn inneal Docker as urrainn òrdughan Docker a chuir an gnìomh air an inneal aoigheachd.

Tog suidheachadh

Chan eil o chionn fhada fhuair Jenkins an cothrom cunntas a thoirt air na riaghailtean aige a’ cleachdadh Pìob-loidhne co-chòrdadh, a tha ga dhèanamh gu math furasta an sgriobt togail atharrachadh agus a stòradh san stòr.

Mar sin cuiridh sinn Dockerfile sònraichte anns an stòr fhèin, anns am bi na leabharlannan uile a tha riatanach airson an togail. San dòigh seo, faodaidh an leasaiche fhèin àrainneachd ath-aithris ullachadh agus cha bhith aige ri iarraidh air OPS dreach sònraichte de Node.JS a chuir a-steach air an òstair.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Tha an ìomhaigh togail seo freagarrach airson a’ mhòr-chuid de thagraidhean Node.JS. Dè ma tha, mar eisimpleir, gu bheil feum agad air ìomhaigh airson pròiseact JVM le sganair Sonar na bhroinn? Faodaidh tu na co-phàirtean a tha a dhìth airson co-chruinneachadh a thaghadh.

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/

Thug sinn cunntas air àrainneachd an t-seanaidh, ach dè a th’ aig Jenkins ri dhèanamh leis? Agus faodaidh riochdairean Jenkins obrachadh le ìomhaighean Docker mar sin agus an togail a-staigh.

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

Stiùiridh agent a’ cleachdadh seilbh dockerfar an urrainn dhut a shònrachadh:

  • ainm an t-soithich cruinneachaidh a rèir do phoileasaidh ainmeachaidh;
  • argamaidean a dh’ fheumar gus an soitheach togail a ruith, far am bi sinn a’ cur suas an eòlaire gnàthach mar eòlaire taobh a-staigh an t-soithich.

Agus mu thràth anns na ceumannan togail tha sinn a’ nochdadh dè na h-òrdughan a bu chòir a chuir an gnìomh taobh a-staigh àidseant togail Docker. Faodaidh seo a bhith mar rud sam bith, agus mar sin bidh mi cuideachd a’ cur air bhog cleachdadh tagraidh a’ cleachdadh ansible.

Gu h-ìosal tha mi airson faidhle Jenkins coitcheann a shealltainn a dh'fhaodas tagradh Node.JS sìmplidh a thogail.

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

}

Dè a thachair?

Taing don dòigh seo, tha sinn air na duilgheadasan a leanas fhuasgladh:

  • tha ùine rèiteachaidh co-chruinneachadh àrainneachd air a lughdachadh gu 10 - 15 mionaidean gach pròiseact;
  • àrainneachd togail tagraidh gu tur ath-aithris, oir faodaidh tu a thogail san dòigh seo air a’ choimpiutair ionadail agad;
  • chan eil duilgheadasan ann le còmhstri eadar diofar dhreachan de dh’ innealan cruinneachaidh;
  • an-còmhnaidh àite-obrach glan nach bi clogged.

Tha am fuasgladh fhèin sìmplidh agus follaiseach agus leigidh e leat cuid de bhuannachdan fhaighinn. Tha, tha an stairsneach inntrigidh air a dhol suas beagan an taca ri òrdughan sìmplidh airson co-chruinneachaidhean, ach a-nis tha gealltanas ann gum bi e an-còmhnaidh air a thogail agus faodaidh an leasaiche fhèin a h-uile dad a tha riatanach airson a phròiseas togail a thaghadh.

Faodaidh tu cuideachd an ìomhaigh a chruinnich mi a chleachdadh Jenkins + Docker. Tha na stòran uile fosgailte agus suidhichte aig rmuhamedgaliev/jenkins_docker.

Fhad ‘s a bha mi a’ sgrìobhadh an artaigil seo, dh ’èirich deasbad mu bhith a’ cleachdadh àidseantan air frithealaichean iomallach gus nach luchdaich am prìomh nód a ’cleachdadh plugan docker-plugan. Ach bruidhnidh mi mu dheidhinn seo san àm ri teachd.

Source: www.habr.com

Cuir beachd ann