Ahoana ny fanangonana tetikasa ao Jenkins raha mila tontolo maro samihafa ianao

Ahoana ny fanangonana tetikasa ao Jenkins raha mila tontolo maro samihafa ianao

Betsaka ny lahatsoratra momba an'i HabrΓ© momba an'i Jenkins, saingy vitsy no mamaritra ohatra momba ny fomba fiasan'i Jenkins sy ny mpiasan'ny docker. Ny fitaovana fananganana tetikasa malaza rehetra toy ny Drone.io, Bitbucket Pipeline, GitLab, Hetsika GitHub ary ny hafa, afaka manangona ny zava-drehetra ao anaty fitoeran-javatra. Ahoana anefa ny amin'i Jenkins?

Ankehitriny dia misy vahaolana amin'ny olana: Jenkins 2 dia tsara amin'ny fiaraha-miasa Docker agents. Amin'ity lahatsoratra ity dia te hizara ny traikefako aho ary hampiseho ny fomba ahafahanao manao izany.

Nahoana aho no nanomboka namaha ity olana ity?

Satria ao anatin'ny orinasa izahay Citronium Satria mampiasa teknolojia maro samihafa isika, dia tsy maintsy mitazona dikan-teny samihafa amin'ny Node.JS, Gradle, Ruby, JDK ary ny hafa ao amin'ny milina fivoriambe. Saingy matetika ny fifandirana amin'ny dikan-teny dia tsy azo ialana. Eny, ho marina ianao raha milaza fa misy mpitantana ny version isan-karazany toy ny nvm, rvm, saingy tsy ny zava-drehetra dia milamina miaraka amin'izy ireo ary misy olana ireo vahaolana ireo:

  • fotoana be dia be izay hadinon'ny mpamorona ny fanadiovana;
  • misy fifandirana eo amin'ny dikan-teny samy hafa amin'ny fotoana iray ihany;
  • Ny mpamorona tsirairay dia mila andiana singa samihafa.

Misy olana hafa, fa avelao aho hilaza aminao ny vahaolana.

Jenkins ao amin'ny Docker

Satria efa miorina tsara amin'ny tontolon'ny fampandrosoana izao i Docker, saika ny zavatra rehetra dia azo ampiasaina amin'ny fampiasana Docker. Ny vahaolana azoko dia ny fananana Jenkins ao amin'ny Docker ary afaka mitantana container Docker hafa. Ity fanontaniana ity dia nanomboka napetraka tamin'ny 2013 tao amin'ny lahatsoratra "Afaka mihazakazaka ao anatin'ny Docker izao i Docker".

Raha fintinina dia mila mametraka an'i Docker ao anaty fitoeran-jiro miasa ianao ary mametraka ilay rakitra /var/run/docker.sock.

Ity misy ohatra Dockerfile izay niseho ho an'i 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

Noho izany dia nahazo container Docker izahay izay afaka manatanteraka baiko Docker amin'ny milina mpampiantrano.

Manangana setup

Vao tsy ela akory izay no nahazoan'i Jenkins fahafahana mamaritra ny fitsipiny amin'ny fampiasana fantsona syntax, izay mahatonga azy ho mora ny manova ny script fananganana ary mitahiry izany ao amin'ny tahiry.

Koa andao hametraka Dockerfile manokana ao amin'ny tahiry, izay ahitana ny tranomboky rehetra ilaina amin'ny fananganana. Amin'izany fomba izany, ny mpandrindra ny tenany dia afaka manomana tontolo azo averina ary tsy mila mangataka amin'ny OPS hametraka dikan-teny manokana an'ny Node.JS amin'ny mpampiantrano.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Ity sary fananganana ity dia mety amin'ny ankamaroan'ny fampiharana Node.JS. Ahoana raha ohatra ka mila sary ho an'ny tetikasa JVM misy scanner Sonar ao anatiny ianao? Afaka misafidy ireo singa ilainao amin'ny fivoriambe ianao.

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/

Nofaritanay ny tontolon'ny fivoriambe, fa inona no idiran'i Jenkins amin'izany? Ary ny mpiasan'ny Jenkins dia afaka miasa amin'ny sary Docker toy izany ary manangana azy ireo ao anatiny.

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

toromarika agent mampiasa fananana dockerizay ahafahanao mamaritra:

  • ny anaran'ny fitoeran'ny fivoriambe araka ny politikan'ny anaranao;
  • Ny arguments dia ilaina amin'ny fampandehanana ny container build, izay amin'ny tranga misy antsika dia mametraka ny lahatahiry ankehitriny ho lahatahiry ao anaty container.

Ary efa eo amin'ny dingana fananganana dia manondro izay baiko hotanterahina ao anatin'ny Docker build agent. Mety ho na inona na inona izany, noho izany dia manomboka ny fametrahana fampiharana mampiasa ansible koa aho.

Eto ambany aho dia te-hampiseho Jenkinsfile jeneraly izay azon'ny fampiharana Node.JS aorina.

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

}

Inona no nitranga?

Noho ity fomba ity dia namaha ireto olana manaraka ireto izahay:

  • Ahena ho 10 - 15 minitra isaky ny tetikasa ny fotoam-pivoriana fivoriambe;
  • tontolo iainana fanamboarana fampiharana azo averina tanteraka, satria azonao atao izany amin'ny solosainao eo an-toerana;
  • tsy misy olana amin'ny fifandirana eo amin'ny dikan-teny samihafa amin'ny fitaovana fivoriambe;
  • toeram-piasana madio foana tsy ho tsentsina.

Ny vahaolana mihitsy dia tsotra sy mazava ary mamela anao hahazo tombony. Eny, niakatra kely ny tokonam-pidirana raha ampitahaina amin'ny baiko tsotra ho an'ny fivoriambe, fa izao dia misy antoka fa haorina foana izy io ary ny mpamorona mihitsy no afaka misafidy izay rehetra ilaina amin'ny fizotrany fananganana.

Azonao atao koa ny mampiasa ny sary nangoniko Jenkins + Docker. Ny loharano rehetra dia misokatra ary hita ao amin'ny rmuhamedgaliev/jenkins_docker.

Teo am-panoratana ity lahatsoratra ity dia nisy adihevitra nipoitra momba ny fampiasana mpiasa amin'ny mpizara lavitra mba tsy hampidirana ny node master amin'ny fampiasana plugin. docker-plugin. Fa hiresaka momba izany aho amin'ny ho avy.

Source: www.habr.com

Add a comment