Mokhoa oa ho bokella merero ho Jenkins haeba o hloka libaka tse ngata tse fapaneng

Mokhoa oa ho bokella merero ho Jenkins haeba o hloka libaka tse ngata tse fapaneng

Ho na le lingoliloeng tse ngata ka Habré mabapi le Jenkins, empa ke tse fokolang tse hlalosang mehlala ea kamoo Jenkins le baemeli ba li-docker ba sebetsang kateng. Lisebelisoa tsohle tse tsebahalang tsa ho aha merero joalo ka Drone.io, Pipeline ea Bitbucket, GitLab, Liketso tsa GitHub le ba bang, ba ka bokella tsohle ka lijaneng. Empa ho thoe'ng ka Jenkins?

Kajeno ho na le tharollo ea bothata: Jenkins 2 o sebetsa hantle le eena Baemeli ba Docker. Sehloohong sena ke batla ho arolelana phihlelo ea ka le ho bontša kamoo u ka e etsang u le mong.

Ke hobane'ng ha ke ile ka qala ho rarolla bothata boo?

Kaha re kopane Citronium Hobane re sebelisa mekhoa e mengata e fapaneng ea theknoloji, re tlameha ho boloka mefuta e fapaneng ea Node.JS, Gradle, Ruby, JDK le tse ling mochine oa kopano. Empa hangata likhohlano tsa liphetolelo li ke ke tsa qojoa. E, u tla be u nepile ha u re ho na le batsamaisi ba mefuta e fapaneng ba joalo ka nvm, rvm, empa ha se ntho e 'ngoe le e' ngoe e tsamaeang hantle le bona mme litharollo tsena li na le mathata:

  • palo e kholo ea nako ea ho sebetsa eo bahlahisi ba lebalang ho e hloekisa;
  • ho na le likhohlano lipakeng tsa mefuta e fapaneng ea nako ea ho matha e tšoanang;
  • Moetsi e mong le e mong o hloka sete e fapaneng ea likarolo.

Ho na le mathata a mang, empa e re ke u bolelle ka tharollo.

Jenkins sebakeng sa Docker

Kaha Docker e se e thehiloe hantle lefats'eng la nts'etsopele, hoo e ka bang eng kapa eng e ka tsamaisoang ho sebelisoa Docker. Tharollo ea ka ke ho ba le Jenkins ho Docker le ho khona ho tsamaisa lijana tse ling tsa Docker. Potso ena e qalile ho botsoa morao ka 2013 sehloohong se reng "Hona joale Docker e ka sebetsa ka har'a Docker".

Ka bokhutšoanyane, o hloka feela ho kenya Docker ka boeona ka sejaneng se sebetsang ebe o kenya faele /var/run/docker.sock.

Mona ke mohlala oa Dockerfile o ileng oa fetohela 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

Kahoo, re na le setshelo sa Docker se ka phethisang litaelo tsa Docker mochining oa moamoheli.

Haha setup

Hase khale Jenkins o ile a fumana monyetla oa ho hlalosa melao ea eona a sebelisa Pipe syntax, e etsang hore ho be bonolo haholo ho fetola script ea ho aha le ho e boloka sebakeng sa polokelo.

Kahoo a re ke re behe Dockerfile e khethehileng sebakeng sa polokelo ka boeona, e tla ba le lilaebrari tsohle tse hlokahalang bakeng sa moaho. Ka tsela ena, moqapi ka boeena a ka lokisetsa tikoloho e ka phetoang 'me a ke ke a tlameha ho kopa OPS ho kenya mofuta o itseng oa Node.JS ho moamoheli.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Setšoantšo sena sa moaho se loketse lits'ebetso tse ngata tsa Node.JS. Ho thoe'ng haeba, ka mohlala, u hloka setšoantšo bakeng sa morero oa JVM o nang le scanner ea Sonar e kenyelletsoeng ka hare? U lokolohile ho khetha likarolo tseo u li hlokang bakeng sa kopano.

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/

Re hlalositse tikoloho ea kopano, empa Jenkins o amana joang le eona? 'Me baemeli ba Jenkins ba ka sebetsa le litšoantšo tse joalo tsa Docker' me ba li hahe ka hare.

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

Tataiso agent e sebedisang thepa dockermoo o ka hlalosang:

  • lebitso la setshelo sa kopano ho latela leano la hau la mabitso;
  • likhang tse hlokahalang ho tsamaisa setshelo sa kaho, moo molemong oa rona re behang bukana ea hajoale e le bukana ka har'a sets'oants'o.

'Me e se e ntse e le mehatong ea ho aha re bonts'a hore na ke litaelo life tse lokelang ho etsoa ka har'a moemeli oa mohaho oa Docker. Sena e ka ba eng kapa eng, ka hona ke boetse ke qala ts'ebeliso ea ts'ebeliso ke sebelisa ansible.

Ka tlase ke batla ho bonts'a Jenkinsfile ea generic eo kopo e bonolo ea Node.JS e ka e hahang.

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

}

Ho etsahetse eng?

Ka lebaka la mokhoa ona, re rarolotse mathata a latelang:

  • Nako ea tlhophiso ea kopano ea tikoloho e fokotsehile ho metsotso e 10 - 15 morero ka mong;
  • tikoloho ea kaho e ka phetoang ka ho felletseng, kaha u ka e haha ​​ka tsela ena komporong ea hau ea lehae;
  • ha ho na mathata a likhohlano lipakeng tsa mefuta e fapaneng ea lisebelisoa tsa kopano;
  • kamehla sebaka se hloekileng sa ho sebetsa se sa koaleheng.

Tharollo ka boeona e bonolo ebile e hlakile ebile e u lumella ho fumana melemo e meng. E, monyako oa ho kena o phahame hanyenyane ha o bapisoa le litaelo tse bonolo bakeng sa likopano, empa hona joale ho na le tiiso ea hore e tla lula e hahiloe 'me moqapi ka boeena a ka khetha ntho e' ngoe le e 'ngoe e hlokahalang bakeng sa mokhoa oa hae oa ho haha.

U ka boela ua sebelisa setšoantšo seo ke se bokeletseng Jenkins + Docker. Mehloli eohle e bulehile 'me e fumaneha ho rmuhamedgaliev/jenkins_docker.

Ha re ntse re ngola sengoloa sena, ho ile ha hlaha puisano ka ho sebelisa baemeli ho li-server tse hole e le hore ba se ke ba kenya node e kholo ka ho sebelisa plugin. docker-plugin. Empa ke tla bua ka taba ena nakong e tlang.

Source: www.habr.com

Eketsa ka tlhaloso