Maitiro ekuunganidza mapurojekiti muJenkins kana iwe uchida akawanda akasiyana nharaunda

Maitiro ekuunganidza mapurojekiti muJenkins kana iwe uchida akawanda akasiyana nharaunda

Pane zvakawanda zvinyorwa paHabrΓ© nezveJenkins, asi vashoma vanotsanangura mienzaniso yemashandiro anoita Jenkins uye madocker agents. Yese yakakurumbira mapurojekiti ekuvaka maturusi senge Drone.io, Bitbucket Pipeline, GitLab, GitHub zviito uye vamwe, vanogona kuunganidza zvese mumidziyo. Asi zvakadini naJenkins?

Nhasi kune mhinduro kune dambudziko: Jenkins 2 yakanaka pakushanda nayo Docker agents. Muchikamu chino ndinoda kugovera ruzivo rwangu uye kuratidza kuti ungazviita sei iwe pachako.

Nei ndakatanga kugadzirisa dambudziko iri?

Sezvo tiri pamwe chete Citronium Nekuti isu tinoshandisa akawanda akasiyana matekinoroji, isu tinofanirwa kuchengetedza akasiyana maNode.JS, Gradle, Ruby, JDK uye mamwe pamushini wegungano. Asi kazhinji kusawirirana kweshanduro hakugone kudziviswa. Ehe, unenge wataura chokwadi kana ukataura kuti kune akasiyana vhezheni mamaneja senge nvm, rvm, asi hazvisi zvese zvakatsetseka navo uye mhinduro idzi dzine matambudziko:

  • yakawanda yenguva yekumhanya iyo vanogadzira vanokanganwa kuchenesa;
  • pane kukakavara pakati peshanduro dzakasiyana dzenguva dzakafanana dzekumhanya;
  • Wese mugadziri anoda seti yakasiyana yezvikamu.

Pane mamwe matambudziko, asi regai ndikuudzei nezvemhinduro.

Jenkins muDocker

Sezvo Docker ikozvino yakanyatso kusimbiswa munyika yekusimudzira, chero chinhu chinogona kumhanyisa uchishandisa Docker. Mhinduro yangu ndeye kuva naJenkins muDocker uye kukwanisa kumhanya mamwe maDocker midziyo. Mubvunzo uyu wakatanga kubvunzwa kumashure muna 2013 muchinyorwa chino "Docker ikozvino inogona kumhanya mukati meDocker".

Muchidimbu, iwe unongoda kuisa Docker pachayo mumudziyo unoshanda uye woisa iyo faira /var/run/docker.sock.

Heino muenzaniso Dockerfile wakazoitira 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

Nekudaro, isu tine Docker mudziyo unogona kuita Docker mirairo pamushini wekutambira.

Gadzira setup

Pasina nguva refu Jenkins akawana mukana wekutsanangura mitemo yayo achishandisa Pipeline syntax, izvo zvinoita kuti zvive nyore kushandura script yekuvaka uye kuichengeta mune repository.

Saka ngatiise yakakosha Dockerfile mune repository pachayo, iyo ichange iine ese maraibhurari anodiwa pakuvaka. Nenzira iyi, mugadziri wacho pachake anogona kugadzirira nharaunda inodzokororwa uye haafanire kubvunza OPS kuti iise yakasarudzika vhezheni yeNode.JS pane iyo host.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Uyu mufananidzo wekuvaka wakakodzera kune akawanda Node.JS application. Ko kana, semuenzaniso, iwe uchida mufananidzo weJVM purojekiti ine Sonar scanner inosanganisirwa mukati? Iwe wakasununguka kusarudza zvikamu zvaunoda pagungano.

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/

Isu takatsanangura nharaunda yegungano, asi Jenkins ane chekuita nazvo? Uye Jenkins vamiririri vanogona kushanda neakadaro Docker mifananidzo uye kuvavaka mukati.

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

Directive agent inoshandisa pfuma dockerkwaunogona kutsanangura:

  • zita remudziyo wegungano zvinoenderana negwaro rako rezita;
  • nharo dzinodiwa kumhanyisa mudziyo wekuvaka, uko kwatiri isu tinoisa dhairekitori razvino sedhairekitori mukati memudziyo.

Uye nechekare mumatanho ekuvaka isu tinoratidza kuti ndeipi mirairo yekuita mukati meDocker kuvaka mumiriri. Izvi zvinogona kuve chero chinhu, saka ini zvakare ndinotangisa application deployment ndichishandisa zvinonzwisisika.

Pazasi ini ndinoda kuratidza generic Jenkinsfile iyo yakapusa Node.JS application inogona kuvaka.

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

}

Chii chaitika?

Nekuda kwenzira iyi, takagadzirisa matambudziko anotevera:

  • nharaunda musangano kumisikidza nguva yakaderedzwa kusvika 10 - 15 maminitsi papurojekiti;
  • inodzokororwa zvachose application kuvaka nharaunda, sezvo uchigona kuivaka nenzira iyi pakombuta yako yemuno;
  • hapana matambudziko nekukakavadzana pakati peshanduro dzakasiyana dzematurusi egungano;
  • nguva dzose nzvimbo yekushanda yakachena iyo isingavharirwi.

Mhinduro yacho pachayo iri nyore uye yakajeka uye inokubvumira kuti uwane mamwe mabhenefiti. Hongu, chikumbaridzo chekupinda chakasimuka zvishoma kana zvichienzaniswa nemirairo iri nyore yemagungano, asi ikozvino pane chivimbiso chokuti ichagara ichivakwa uye mugadziri pachake anogona kusarudza zvose zvinodiwa pakuvaka kwake.

Iwe unogona zvakare kushandisa mufananidzo wandakaunganidza Jenkins + Docker. All sources akazaruka uye ari pa rmuhamedgaliev/jenkins_docker.

Ndichiri kunyora chinyorwa ichi, nhaurirano yakamuka pamusoro pekushandisa vamiririri pamaseva ari kure kuti asatakure master node uchishandisa plugin. docker-plugin. Asi ini ndichataura nezvazvo mune ramangwana.

Source: www.habr.com

Voeg