Otu esi anakọta ọrụ na Jenkins ma ọ bụrụ na ịchọrọ ọtụtụ gburugburu dị iche iche

Otu esi anakọta ọrụ na Jenkins ma ọ bụrụ na ịchọrọ ọtụtụ gburugburu dị iche iche

Enwere ọtụtụ akụkọ na Habré gbasara Jenkins, mana ole na ole na-akọwa ihe atụ nke otu Jenkins na ndị ọrụ docker si arụ ọrụ. Ngwa arụ ọrụ arụrụ arụ niile ama ama dịka Drone.io, Pipeline Bitbucket, GitLab, Omume GitHub na ndị ọzọ, nwere ike ịnakọta ihe niile n'ime akpa. Ma gịnị banyere Jenkins?

Taa enwere ngwọta maka nsogbu ahụ: Jenkins 2 dị mma na-arụ ọrụ Ndị ọrụ Docker. N'isiokwu a, achọrọ m ịkọrọ ahụmahụ m ma gosi otú ị ga-esi mee ya n'onwe gị.

Gịnị kpatara m ji malite idozi nsogbu a?

Ebe ọ bụ na anyị nọ na ụlọ ọrụ Citronium N'ihi na anyị na-eji ọtụtụ teknụzụ dị iche iche, anyị ga-edobe ụdị dị iche iche nke Node.JS, Gradle, Ruby, JDK na ndị ọzọ na igwe mgbakọ. Mana ọtụtụ mgbe, enweghị ike izere esemokwu ụdị. Ee, ị ga-adị mma ma ọ bụrụ na ị na-ekwu na e nwere dị iche iche ụdị njikwa dị ka nvm, rvm, ma ọ bụghị ihe niile dị mma na ha na ngwọta ndị a nwere nsogbu:

  • nnukwu ego nke oge ịgba ọsọ nke ndị mmepe na-echefu ihicha;
  • enwere esemokwu n'etiti ụdị dị iche iche nke otu oge ịgba ọsọ;
  • Onye nrụpụta ọ bụla chọrọ akụrụngwa dị iche iche.

Enwere nsogbu ndị ọzọ, mana ka m kọọrọ gị ihe ngwọta ya.

Jenkins nọ na Docker

Ebe Docker guzobeziri nke ọma na ụwa mmepe, ihe fọrọ nke nta ka ọ bụrụ ihe ọ bụla nwere ike iji Docker mee ihe. Ngwọta m bụ inwe Jenkins na Docker ma nwee ike ijikwa akpa Docker ndị ọzọ. A malitere ịjụ ajụjụ a n'afọ 2013 n'isiokwu ahụ "Docker nwere ike ịgba ọsọ n'ime Docker".

Na nkenke, naanị ịkwesịrị ịwụnye Docker n'onwe ya n'ime akpa na-arụ ọrụ wee bulie faịlụ ahụ /var/run/docker.sock.

Nke a bụ ọmụmaatụ Dockerfile tụgharịrị maka 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

Yabụ, anyị nwetara akpa Docker nke nwere ike mebe iwu Docker na igwe nnabata.

Mee ntọala

N'oge na-adịbeghị anya Jenkins nwetara ohere iji kọwaa iwu ya Pipeline syntax, nke na-eme ka ọ dị mfe ịgbanwe ederede ihe nrụpụta wee chekwaa ya na ebe nchekwa.

Yabụ ka anyị tinye Dockerfile pụrụ iche na ebe nchekwa n'onwe ya, nke ga-enwe ọba akwụkwọ niile dị mkpa maka ịrụ ya. N'ụzọ dị otú a, onye mmepụta n'onwe ya nwere ike ịkwadebe gburugburu ebe a na-emegharị ugboro ugboro na ọ gaghị arịọ OPS ka ọ wụnye otu ụdị Node.JS na onye ọbịa.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Onyonyo nrụpụta a dabara adaba maka ọtụtụ ngwa Node.JS. Kedu ihe ma ọ bụrụ, dịka ọmụmaatụ, ịchọrọ onyonyo maka ọrụ JVM nwere nyocha Sonar gụnyere n'ime? Ị nweere onwe gị ịhọrọ ihe ndị ị chọrọ maka mgbakọ.

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/

Anyị kọwara ebe mgbakọ ahụ, ma gịnị jikọrọ Jenkins na ya? Ndị ọrụ Jenkins nwere ike iji ihe onyonyo Docker rụọ ọrụ ma wuo ha n'ime.

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

Ntụziaka agent na-eji ihe onwunwe dockerebe ị nwere ike ịkọwa:

  • aha akpa mgbakọ dị ka iwu aha gị si dị;
  • arụmụka mkpa na-agba ọsọ na-ewu akpa, ebe anyị ikpe na-ebugo ugbu a ndekọ dị ka ndekọ n'ime akpa.

Ma ugbua n'ime usoro iwulite anyị na-egosi iwu ndị a ga-eme n'ime onye nrụpụta Docker. Nke a nwere ike ịbụ ihe ọ bụla, yabụ m na-amalite ntinye ngwa ngwa site na iji ike.

N'okpuru ebe a, achọrọ m igosi Jenkinsfile ọnyà nke ngwa Node.JS dị mfe nwere ike wuo.

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

}

Kedu ihe mere?

N'ihi usoro a, anyị doziri nsogbu ndị a:

  • A na-ebelata oge nhazi oge mgbakọ gburugburu na 10 - 15 nkeji kwa ọrụ;
  • a kpamkpam repeatable ngwa ewu gburugburu ebe obibi, ebe ị nwere ike iwu ya otú a na mpaghara gị na kọmputa;
  • enweghi nsogbu na esemokwu n'etiti nsụgharị dị iche iche nke ngwaọrụ mgbakọ;
  • mgbe niile na-arụ ọrụ dị ọcha nke na-adịghị egbochi.

Ihe ngwọta n'onwe ya dị mfe ma doo anya ma na-enye gị ohere ịnweta ụfọdụ uru. Ee, ọnụ ụzọ ntinye ebiliwo ntakịrị ma e jiri ya tụnyere iwu dị mfe maka mgbakọ, ma ugbu a enwere nkwa na a ga-ewu ya mgbe niile na onye mmepụta n'onwe ya nwere ike ịhọrọ ihe niile dị mkpa maka usoro iwu ya.

I nwekwara ike iji onyonyo m chịkọtara Jenkins + Docker. Ebe niile mepere emepe ma dị na rmuhamedgaliev/jenkins_docker.

Mgbe ị na-ede akụkọ a, mkparịta ụka bilitere banyere iji ndị ọrụ na sava dịpụrụ adịpụ ka ọ ghara ibunye ọnụ ọnụ nna ukwu site na iji ngwa mgbakwunye. docker-plugin. Ma m ga-ekwu maka nke a n'ọdịnihu.

isi: www.habr.com

Tinye a comment