Momwe mungasonkhanitsire ma projekiti ku Jenkins ngati mukufuna malo osiyanasiyana

Momwe mungasonkhanitsire ma projekiti ku Jenkins ngati mukufuna malo osiyanasiyana

Pali zolemba zambiri za HabrΓ© za Jenkins, koma ochepa amafotokoza zitsanzo za momwe Jenkins ndi othandizira ma docker amagwirira ntchito. Onse otchuka ntchito kumanga zida ngati Drone.io, Pipe ya Bitbucket, GitLab, Zochita za GitHub ndi ena, akhoza kusonkhanitsa chirichonse mu mbiya. Koma bwanji za Jenkins?

Masiku ano pali njira yothetsera vutoli: Jenkins 2 ndi wabwino kugwira nawo ntchito Othandizira a Docker. M'nkhaniyi ndikufuna kugawana zomwe ndakumana nazo ndikuwonetsa momwe mungachitire nokha.

N’chifukwa chiyani ndinayamba kuthetsa vutoli?

Popeza tili pakampani Citronium Chifukwa chakuti timagwiritsa ntchito matekinoloje osiyanasiyana, tiyenera kusunga mitundu yosiyanasiyana ya Node.JS, Gradle, Ruby, JDK ndi ena pamakina a msonkhano. Koma nthawi zambiri mikangano yamitundu siyingapewedwe. Inde, mudzakhala olondola ngati munganene kuti pali oyang'anira mitundu yosiyanasiyana monga nvm, rvm, koma sikuti zonse zili bwino ndi iwo ndipo mayankho ali ndi mavuto:

  • nthawi yambiri yothamanga yomwe opanga amaiwala kuyeretsa;
  • pali mikangano pakati pa mitundu yosiyanasiyana ya nthawi yothamanga;
  • Wopanga aliyense amafunikira magawo osiyanasiyana.

Palinso mavuto ena, koma ndikuuzeni za yankho lake.

Jenkins ku Docker

Popeza Docker tsopano yakhazikitsidwa bwino mdziko lachitukuko, pafupifupi chilichonse chitha kuyendetsedwa ndi Docker. Yankho langa ndikukhala ndi Jenkins ku Docker ndikutha kuyendetsa zotengera zina za Docker. Funsoli lidayamba kufunsidwa mu 2013 m'nkhani yakuti "Docker tsopano ikhoza kuthamanga mkati mwa Docker".

Mwachidule, muyenera kungoyika Docker yokha mu chidebe chogwirira ntchito ndikuyika fayilo /var/run/docker.sock.

Nachi chitsanzo cha Dockerfile chomwe chidapezeka kwa 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

Chifukwa chake, tili ndi chidebe cha Docker chomwe chimatha kutsata malamulo a Docker pamakina olandila.

Kupanga kupanga

Osati kale kwambiri Jenkins adapeza mwayi wofotokozera malamulo ake pogwiritsa ntchito Bomba syntax, zomwe zimapangitsa kuti zikhale zosavuta kusintha zolemba ndikuzisunga m'malo osungira.

Chifukwa chake tiyeni tiyike Dockerfile yapadera munkhokwe yokha, yomwe ikhala ndi malaibulale onse ofunikira pakumanga. Mwanjira iyi, woyambitsa yekha akhoza kukonzekera malo obwerezabwereza ndipo sadzafunsa OPS kuti ayike mtundu wina wa Node.JS pa wolandirayo.

FROM node:12.10.0-alpine

RUN npm install yarn -g

Chithunzi chomangirirachi ndi choyenera pamapulogalamu ambiri a Node.JS. Bwanji ngati, mwachitsanzo, mukufuna chithunzi cha polojekiti ya JVM yokhala ndi scanner ya Sonar yophatikizidwa mkati? Muli ndi ufulu wosankha zigawo zomwe mukufuna kuti musonkhane.

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/

Tidafotokozera malo amsonkhano, koma a Jenkins akuyenera kuchita chiyani? Ndipo othandizira a Jenkins amatha kugwira ntchito ndi zithunzi za Docker zotere ndikuzimanga mkati.

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 amagwiritsa ntchito katundu dockerkumene mungathe kufotokoza:

  • dzina la chidebe cha msonkhano malinga ndi ndondomeko yanu ya mayina;
  • mikangano yofunika kuyendetsa chidebe chomangira, pomwe ife timayika chikwatu chomwe chilipo ngati chikwatu mkati mwa chidebe.

Ndipo kale pamasitepe omanga tikuwonetsa malamulo oti achite mkati mwa Docker build agent. Izi zitha kukhala chilichonse, chifukwa chake ndikuyambitsanso kutumiza ntchito pogwiritsa ntchito ansible.

Pansipa ndikufuna kuwonetsa Jenkinsfile wamba yomwe pulogalamu yosavuta ya Node.JS imatha kupanga.

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

}

Chinachitika ndi chiyani?

Chifukwa cha njirayi, tinathetsa mavuto otsatirawa:

  • nthawi yokonzekera msonkhano wa chilengedwe imachepetsedwa kukhala mphindi 10 - 15 pa polojekiti iliyonse;
  • malo omangika obwerezabwereza kwathunthu, popeza mutha kumanga motere pakompyuta yanu;
  • palibe mavuto ndi mikangano pakati pa mitundu yosiyanasiyana ya zida zosonkhana;
  • nthawi zonse malo ogwirira ntchito oyera omwe samatsekeka.

Yankho lokha ndilosavuta komanso lodziwikiratu ndipo limakupatsani mwayi wopeza zabwino. Inde, malo olowera adakwera pang'ono poyerekeza ndi malamulo ophweka a misonkhano, koma tsopano pali chitsimikizo chakuti chidzamangidwa nthawi zonse ndipo wopanga yekha akhoza kusankha zonse zomwe zili zofunika pa ntchito yake yomanga.

Mukhozanso kugwiritsa ntchito chithunzi chomwe ndasonkhanitsa Jenkins + Docker. Magwero onse ndi otseguka ndipo ali rmuhamedgaliev/jenkins_docker.

Polemba nkhaniyi, kukambirana kudabuka pakugwiritsa ntchito othandizira pa maseva akutali kuti asakweze mfundo zazikulu pogwiritsa ntchito pulogalamu yowonjezera. docker-plugin. Koma ndilankhula izi mtsogolomu.

Source: www.habr.com

Kuwonjezera ndemanga